进程无法在linux上被杀死

时间:2014-05-02 09:25:31

标签: c linux process

我写了以下(相当愚蠢的)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 '时显示它(以及其他一些)。有谁知道为什么?

1 个答案:

答案 0 :(得分:4)

默认情况下,kill命令发送SIGTERM。如果您想使用SIGKILL终止自己的计划,请使用kill -KILL 4242

如果进程忽略^C,我会发现另一件事情,只需按^Z,它将暂停进程并让您恢复对终端的控制,然后您可以使用{{{ 1}}。