C 实现 HUP 信号重启进程

31 篇文章 0 订阅
/*****************************************************************************
 *  Copyright          :  All Rights Reserved.
 *
 *  Date               :  2013-01-11 17:02:10
 *  Author/Corporation :  Dengzhaoqun
 *  Email              :  dengzhaoqun@163.com
 *****************************************************************************/
#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;
int flag = 0;

void restart(void);
void sighup_handler(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_handler);
	
	while(1)
	{
		if(flag)
			restart();
		sleep(10);
	}
	return 0;
}

void sighup_handler(int sig)
{
	flag = 1;
}

void restart(void)
{
	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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值