当前位置: 技术问答>linux和unix
对 HUP 信号的处理
来源: 互联网 发布时间:2017-03-29
本文导语: 一般对进程发送 HUP 信号, 会让进程重启. 以下为我的一个实现 #include #include #include #include #include #include #include #include char **bak_argv; void sighup_restart(int sig); // argv[0] 尽量使用绝对路径, 因为程序执行...
一般对进程发送 HUP 信号, 会让进程重启.
以下为我的一个实现
第一次执行 "kill -s HUP pid" , 程序表现正常.
之后再执行 "kill -s HUP pid", 则没有作用.
Thanks.
以下为我的一个实现
#include
#include
#include
#include
#include
#include
#include
#include
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: %sn", bak_argv[0], strerror(errno));
closelog();
exit(EXIT_FAILURE);
}
第一次执行 "kill -s HUP pid" , 程序表现正常.
之后再执行 "kill -s HUP pid", 则没有作用.
Thanks.
|
子进程继承了父进程的block位,用sigprocmask把它清掉