我写了以下(相当愚蠢的)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;
}
现在不能从终端杀死!
当我尝试从终端执行' kill 4242 '时(4242是进程ID),它会忽略它!
当然,我的意图是这个过程会忽略所有信号,但SIGKILL 不能被忽略,是吗?
我怎么能杀死这个过程?
BTW,当从终端运行' ps '时,不会在列表中显示它:
4348 pts/8 00:00:00 bash
4444 pts/8 00:00:00 ps
它只会在我运行' ps -u my_username '时显示它(以及其他一些)。有谁知道为什么?
答案 0 :(得分:4)
默认情况下,kill
命令发送SIGTERM
。如果您想使用SIGKILL
终止自己的计划,请使用kill -KILL 4242
。
如果进程忽略^C
,我会发现另一件事情,只需按^Z
,它将暂停进程并让您恢复对终端的控制,然后您可以使用{{{ 1}}。