当前位置: 技术问答>linux和unix
守护进程接收信号杀死或重启子进程 如何实现?
来源: 互联网 发布时间:2016-06-14
本文导语: int child_status; if ((pid = fork()) 0) /* parent */ { exit(0); } else /* child */ { setsid(); chdir("/"); umask(0); while(1) { if ((pid = fork()) 0) /* daemon process */ { wait(&child_status); ...
int child_status;
if ((pid = fork()) 0) /* parent */
{
exit(0);
}
else /* child */
{
setsid();
chdir("/");
umask(0);
while(1)
{
if ((pid = fork()) 0) /* daemon process */
{
wait(&child_status);
}
else /* daemon process's child */
{
server_run (local_address, port);
}
}
}
以上的守护进程中如何实现:通过终端给守护进程发信号(KILL,RESTART等)杀死或重启子进程。
|
守护进程杀死子进程倒没问题,
kill(son_id,SIGKILL);即可
但是你要终端跟守护进程交互,这个只能自己记下守护进程的pid,
然后kill信号过去。
这个时候用 SIGUSR1 比较合适,然后给守护进程signal一个SIGUSR1 的处理函数,来实现kill(son_id,SIGKILL);
kill(son_id,SIGKILL);即可
但是你要终端跟守护进程交互,这个只能自己记下守护进程的pid,
然后kill信号过去。
这个时候用 SIGUSR1 比较合适,然后给守护进程signal一个SIGUSR1 的处理函数,来实现kill(son_id,SIGKILL);
|
要另起一个线程去做这件事,等待信号。
|
这个当然没有问题
在wait的时候 当然能接受信号 不过这时候注意一下 wait的返回值
可能是 -1 然后 errno 是 INTR 这时你就要用一个循环中 调用wait的函数 如果是INTR 就continue
hairtz的方法是可以的。