【发布时间】:2011-05-05 03:38:06
【问题描述】:
假设,我知道我的父 id 的过程并想
kill(my_parent_id, SIGTERM)
作为父进程,我怎样才能捕捉到这个信号?
【问题讨论】:
假设,我知道我的父 id 的过程并想
kill(my_parent_id, SIGTERM)
作为父进程,我怎样才能捕捉到这个信号?
【问题讨论】:
注册捕捉信号:
void termination_handler(int sig)
{
/* do something */
}
struct sigaction handler;
handler.sa_handler = termination_handler;
sigemptyset (&handler.sa_mask);
handler.sa_flags = SA_RESTART;
sigaction(SIGTERM, &handler, NULL);
这是一个很好的example page。
您可以使用旧样式,但不建议:
void termination_handler()
{
/* do something */
}
signal(SIGTERM, termination_handler);
【讨论】:
handler.sa_flags = SA_RESTART;。非重启信号将严重破坏不期望得到EINTR 并且不处理它的代码。
getppid() 获取您的父母ID,并使用:kill(getppid(), SIGTERM); 向其发送信号可能还想确定您也知道您正在向谁发送信号。