考虑这段代码
#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
杀死此程序。
是否可以在不重新启动计算机的情况下终止它以及如何终止它?
答案 0 :(得分:3)
如评论中所述,答案是“不”,你无法构建这样的程序。标准(The Open Group Base Specifications Issue 7)列出了这些不可忽视的信号:
答案 1 :(得分:0)
您无法处理SIGKILL,因此可以终止该程序。 信号由内核“切换”到进程,因此从processA向processB发送信号使用内核。当SIGKILL交付给内核并且没有传递给进程时。所以内核完成了工作并终止了进程。