zl程序教程

您现在的位置是:首页 >  后端

当前栏目

用c语言实现HUP信号重启进程的方法

方法进程语言 实现 重启 信号 HUP
2023-06-13 09:15:00 时间
代码如下所示:
复制代码代码如下:

#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;
intflag=0;
voidrestart(void);
voidsighup_handler(intsig);
//argv[0]尽量使用绝对路径,因为程序执行过程中可能会使用chdir().
intmain(intargc,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);
 }
 return0;
}
voidsighup_handler(intsig)
{
 flag=1;
}
voidrestart(void)
{
 switch(fork())
 {
  case-1:
   openlog("sig_hup",LOG_PID,0);
   syslog(LOG_ERR,"forkfailed:%s",strerror(errno));
   closelog();

   exit(EXIT_FAILURE);
   break;
  case0:
   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);
}