【发布时间】:2017-11-30 22:36:27
【问题描述】:
考虑以下 C 代码块:
void TERMHandler(int sig){
signal (sig, SIG_DFL);
}
main() {
pid_t pid;
pid = fork()
if (pid == 0) {
signal(SIGTERM,TERMHandler);
while(1);
}
else
{
sleep(3);
kill(pid,SIGTERM);
sleep(3);
kill(pid,SIGTERM);
}
}
我们创建一个新进程并区分子 (pid = 0) 和父进程。
可以为每种类型的信号使用自定义处理程序吗?如果是这样,假设我们创建了一个自定义处理程序,如果我只使用一次信号(或从不重置信号处理程序),那么所有信号之间没有任何区别是否正确,因为它只会执行我的处理程序而不考虑函数中的信号?
我想说的是,是不是这样:
signal(SIGTERM,CustomHandler);
signal(SIGTSTP,CustomHandler);
signal(SIGHUP,CustomHandler);
...
当父进程运行kill(pid, SomeSignal)时会执行相同的代码?
【问题讨论】:
-
这个信号用于什么内核? Linux? BSD?操作系统? TI83OS?
-
是Linux的,忘记指定了
-
重要提示:阅读signal-safety(7) & signal(7)
标签: c linux process signals kill