Linux 上的进程无法被终止

so.*_*red 0 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;

}
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 ”(以及其他一些)时显示。有人知道为什么吗?

Gra*_*sus 6

默认情况下,kill\xc2\xa0 命令发送SIGTERM. 如果你想用 来终止你的程序SIGKILL,请使用kill -KILL 4242.

\n\n

我发现另一件事很方便,如果一个进程忽略了^C,只需按^Z,它就会挂起该进程并将终端的控制权交还给您,然后您可以使用 杀死该进程kill %

\n