我写了以下(相当愚蠢的)C 代码:
#include<stdio.h>
#include<signal.h>
void myHandler(int signum) {
printf("This will never be printed...\n");
}
int main(int argc, char *argv[]) {
struct sigaction s1;
s1.sa_handler=myHandler;
sigset_t sigs;
sigfillset(&sigs);
sigprocmask(SIG_BLOCK, &sigs, NULL);
sigaction(SIGINT, &s1, NULL);
while (1) sleep();
return 1;
}
Run Code Online (Sandbox Code Playgroud)
现在它不能从终端被杀死!
当我尝试从终端执行“ kill 4242 ”(4242是进程ID)时,它会忽略它!
当然,我的本意是这个进程会忽略所有信号,但是SIGKILL不能被忽略,不是吗?
我怎样才能杀死这个进程?
顺便说一句,当从终端运行“ ps ”时,它不会在列表中显示:
4348 pts/8 00:00:00 bash
4444 pts/8 00:00:00 ps
Run Code Online (Sandbox Code Playgroud)
它只会在我运行“ ps -u my_username ”(以及其他一些)时显示。有人知道为什么吗?
默认情况下,kill\xc2\xa0 命令发送SIGTERM. 如果你想用 来终止你的程序SIGKILL,请使用kill -KILL 4242.
我发现另一件事很方便,如果一个进程忽略了^C,只需按^Z,它就会挂起该进程并将终端的控制权交还给您,然后您可以使用 杀死该进程kill %。