用c語言實(shí)現(xiàn)HUP信號重啟進(jìn)程的方法
更新時間:2013年05月27日 15:43:25 作者:
本篇文章是對使用c語言實(shí)現(xiàn)HUP信號重啟進(jìn)程的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
代碼如下所示:
#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] 盡量使用絕對路徑, 因?yàn)槌绦驁?zhí)行過程中可能會使用 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);
}
復(fù)制代碼 代碼如下:
#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] 盡量使用絕對路徑, 因?yàn)槌绦驁?zhí)行過程中可能會使用 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);
}
您可能感興趣的文章:
- C語言編寫Linux守護(hù)進(jìn)程實(shí)例
- c語言多進(jìn)程tcp服務(wù)器示例
- Linux中使用C語言的fork()函數(shù)創(chuàng)建子進(jìn)程的實(shí)例教程
- 舉例講解C語言的fork()函數(shù)創(chuàng)建子進(jìn)程的用法
- C語言實(shí)現(xiàn)在windows服務(wù)中新建進(jìn)程的方法
- Linux下C語言修改進(jìn)程名稱的方法
- C語言中設(shè)置進(jìn)程優(yōu)先順序的方法
- C語言中操作進(jìn)程信號的相關(guān)函數(shù)使用詳解
- C語言怎么獲得進(jìn)程的PE文件信息
- Linux下C語言的fork()子進(jìn)程函數(shù)用法及相關(guān)問題解析
- C語言中獲取進(jìn)程識別碼的相關(guān)函數(shù)
- C語言實(shí)現(xiàn)查看進(jìn)程是否存在的方法示例
相關(guān)文章
Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫清理
項(xiàng)目如果需要存儲很多日志記錄比如運(yùn)行日志,時間長了記錄數(shù)量非常多,數(shù)據(jù)庫體積不斷增大,對應(yīng)數(shù)據(jù)庫表的增刪改查的效率不斷降低,因此需要將早期的數(shù)據(jù)清理。本文將詳細(xì)介紹一下通用數(shù)據(jù)庫清理的實(shí)現(xiàn),需要的可以參考一下2022-02-02
vs2019 Com組件初探之簡單的COM編寫及實(shí)現(xiàn)跨語言調(diào)用的方法
這篇文章主要介紹了vs2019 Com組件初探之簡單的COM編寫及實(shí)現(xiàn)跨語言調(diào)用的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
C語言實(shí)現(xiàn)最簡單的剪刀石頭布小游戲示例
這篇文章主要介紹了C語言實(shí)現(xiàn)最簡單的剪刀石頭布小游戲,涉及C語言數(shù)組、隨機(jī)數(shù)與數(shù)值運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09

