是否可以终止不响应信号的程序?

时间:2015-03-21 16:24:49

标签: c unix signals

考虑这段代码

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void sig_handler(int signum)
{
    printf("Received signal %d\n", signum);
}

int main()
{
    signal(SIGINT, sig_handler);
    signal(SIGTERM, sig_handler);
    signal(SIGHUP, sig_handler);
    signal(SIGQUIT, sig_handler);
    signal(SIGABRT, sig_handler);
    signal(SIGILL, sig_handler);
    signal(SIGKILL, sig_handler);
    signal(SIGFPE, sig_handler);
    signal(SIGSEGV, sig_handler);
    signal(SIGPIPE, sig_handler);
    signal(SIGALRM, sig_handler);
    signal(SIGCHLD, sig_handler);
    signal(SIGUSR1, sig_handler);
    signal(SIGUSR2, sig_handler);
    signal(SIGSTOP, sig_handler);
    sleep(10); 
    return 0;
}

它可以处理每个信号。我们无法使用killall program_name杀死此程序。

是否可以在不重新启动计算机的情况下终止它以及如何终止它?

2 个答案:

答案 0 :(得分:3)

如评论中所述,答案是“不”,你无法构建这样的程序。标准(The Open Group Base Specifications Issue 7)列出了这些不可忽视的信号:

  • SIGKILL
  • SIGSTOP

答案 1 :(得分:0)

您无法处理SIGKILL,因此可以终止该程序。 信号由内核“切换”到进程,因此从processA向processB发送信号使用内核。当SIGKILL交付给内核并且没有传递给进程时。所以内核完成了工作并终止了进程。