首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

对 HUP 信号的处置

2013-01-21 
对 HUP 信号的处理一般对进程发送 HUP 信号, 会让进程重启.以下为我的一个实现#include stdio.h#include

对 HUP 信号的处理
一般对进程发送 HUP 信号, 会让进程重启.
以下为我的一个实现

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
#include <syslog.h>
#include <stdarg.h>

char **bak_argv;

void sighup_restart(int sig);

// argv[0] 尽量使用绝对路径, 因为程序执行过程中可能会使用 chdir() .
int main(int argc, char *argv[])
{
openlog("sig_hup", LOG_PID, 0);
syslog(LOG_ERR, "%s", argv[0]);
closelog();

bak_argv = argv;
signal(SIGHUP, sighup_restart);
while(1)
sleep(10);
return 0;
}

void sighup_restart(int sig)
{
switch(fork())
{
case -1:
openlog("sig_hup", LOG_PID, 0);
syslog(LOG_ERR, "fork failed: %s", strerror(errno));
closelog();

exit(EXIT_FAILURE);
break;
case 0:
break;
default:
exit(EXIT_SUCCESS);
}
execv(bak_argv[0], bak_argv);

openlog("sig_hup", LOG_PID, 0);
syslog(LOG_ERR, "execv(%s, ...) failed: %s\n", bak_argv[0], strerror(errno));
closelog();

exit(EXIT_FAILURE);
}



第一次执行 "kill -s HUP pid" , 程序表现正常.
之后再执行 "kill -s HUP pid", 则没有作用. 

Thanks.
[解决办法]
子进程继承了父进程的block位,用sigprocmask把它清掉

热点排行