【发布时间】:2015-03-21 16:24:49
【问题描述】:
考虑这段代码
#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 杀死这个程序。
是否可以在不重新启动计算机的情况下终止它?如何终止?
【问题讨论】:
-
SIGKILL (-9) 可以解决问题 - 总是
-
@EdHeal,我忘记将其包含在内以进行处理。现在可以解决问题了吗?
-
当然可以终止,想象一下拦截所有信号的程序可能造成的损害。内核具有强制终止进程的能力。
-
你无法捕捉到那个信号
-
@juanchopanza - 它不会终止进程。