用c语言实现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);
}
相关文章
- Oracle删除死锁进程的方法
- Oracle 查询空字段:技巧与方法(oracle查询空字段)
- Linux进程中实现读写锁的方法(linux进程读写锁)
- 快速终止Linux批量进程的方法(批量结束进程linux)
- Linux中快速过滤文本的方法(linux过滤文本)
- Java List.removeAll()方法:从列表中移除所有元素
- Hibernate Query接口 uniqueResult方法:单值检索
- pidLinux中获取父进程PID的方法(linux获取父进程)
- Linux查看网卡带宽:一种新方法(linux查看网卡带宽)
- Linux下kill系统进程的五种方法(linuxkill5)
- 实现Linux进程间通信的方法(linux实现进程通信)
- Linux中查看当前进程ID的方法(linux当前进程id)
- 进程的方法Killing processes in Linux: useful commands for terminating current tasks(linux结束当前)
- Linux系统下获取进程信息的方法解析(linux 获取进程信息)
- Linux下查看进程号的简便方法(linux 查看进程号)
- Linux实现自动同步时间的方法(linux同步时间)
- 高效提升MSSQL查询执行时间的方法(mssql查询执行时间)
- Linux下获取当前进程号的简单方法(linux获取当前进程号)
- 解决Redis进程,找出终止方法(怎么结束redis进程)
- MySQL中用以查询列表的C语言方法(c mysql 列表查询)
- JSevent使用方法详解
- MySQL服务器进程CPU占用100%的解决方法
- javascript中String类的subString()方法和slice()方法
- Linux下实现PHP多进程的方法分享
- php中3种方法统计字符串中每种字符的个数并排序
- C#获取进程的主窗口句柄的实现方法
- SQL中WHERE变量ISNULL条件导致全表扫描问题的解决方法
- mysql批量更新与批量更新多条记录的不同值实现方法
- IIS6w3wp.exe进程占用cpu和内存过多的解决方法
- javamail使用qq邮箱发邮件的配置方法
- MySQL降权运行之MySQL以Guests帐户启动设置方法