【问题标题】:Process cannot be killed on linux在linux上无法杀死进程
【发布时间】:2014-05-02 09:25:31
【问题描述】:

我写了以下(相当愚蠢的)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 不能被忽略,可以吗?
我怎样才能杀死这个进程?

顺便说一句,当从终端运行“ps”时,它不会在列表中显示:

 4348 pts/8    00:00:00 bash
 4444 pts/8    00:00:00 ps

它只会在我运行 'ps -u my_username' (以及其他一堆)时显示。有人知道为什么吗?

【问题讨论】:

  • 如果您尝试ps -ef 会怎样?它必须出现在那里。然后只是kill id 甚至kill -9 id
  • Plain kill 发送 SIGTERM,而不是 SIGKILL。

标签: c linux process


【解决方案1】:

默认情况下,kill 命令发送 SIGTERM。如果你想用SIGKILL 杀死你的程序,请使用kill -KILL 4242

如果进程忽略^C,我觉得很方便,只需按^Z,它将暂停该进程并让您重新控制终端,然后您可以使用kill % 终止该进程。

【讨论】:

  • 这个程序的编写方式,它也忽略了Ctrl-Z...kill -KILL 4242 成功了... :)
猜你喜欢
  • 2015-06-08
  • 1970-01-01
  • 2013-08-05
  • 2015-06-01
  • 2016-07-13
  • 1970-01-01
  • 2015-01-06
  • 2018-05-07
  • 1970-01-01
相关资源
最近更新 更多