用c語(yǔ)言實(shí)現(xiàn)HUP信號(hào)重啟進(jìn)程的方法
更新時(shí)間:2013年05月27日 15:43:25 作者:
本篇文章是對(duì)使用c語(yǔ)言實(shí)現(xiàn)HUP信號(hào)重啟進(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] 盡量使用絕對(duì)路徑, 因?yàn)槌绦驁?zhí)行過(guò)程中可能會(huì)使用 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] 盡量使用絕對(duì)路徑, 因?yàn)槌绦驁?zhí)行過(guò)程中可能會(huì)使用 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語(yǔ)言編寫Linux守護(hù)進(jìn)程實(shí)例
- c語(yǔ)言多進(jìn)程tcp服務(wù)器示例
- Linux中使用C語(yǔ)言的fork()函數(shù)創(chuàng)建子進(jìn)程的實(shí)例教程
- 舉例講解C語(yǔ)言的fork()函數(shù)創(chuàng)建子進(jìn)程的用法
- C語(yǔ)言實(shí)現(xiàn)在windows服務(wù)中新建進(jìn)程的方法
- Linux下C語(yǔ)言修改進(jìn)程名稱的方法
- C語(yǔ)言中設(shè)置進(jìn)程優(yōu)先順序的方法
- C語(yǔ)言中操作進(jìn)程信號(hào)的相關(guān)函數(shù)使用詳解
- C語(yǔ)言怎么獲得進(jìn)程的PE文件信息
- Linux下C語(yǔ)言的fork()子進(jìn)程函數(shù)用法及相關(guān)問(wèn)題解析
- C語(yǔ)言中獲取進(jìn)程識(shí)別碼的相關(guān)函數(shù)
- C語(yǔ)言實(shí)現(xiàn)查看進(jìn)程是否存在的方法示例
相關(guān)文章
C語(yǔ)言代碼實(shí)現(xiàn)簡(jiǎn)單三子棋游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言代碼實(shí)現(xiàn)簡(jiǎn)單三子棋游戲,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07C++如何實(shí)現(xiàn)簡(jiǎn)易掃雷游戲
這篇文章主要為大家詳細(xì)介紹了C++如何實(shí)現(xiàn)簡(jiǎn)易掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03Matlab實(shí)現(xiàn)二維散點(diǎn)主方向直方圖的繪制詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Matlab實(shí)現(xiàn)二維散點(diǎn)主方向直方圖的繪制,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下2022-09-09C語(yǔ)言/C++中如何產(chǎn)生隨機(jī)數(shù)
這里要用到的是rand()函數(shù), srand()函數(shù),和time()函數(shù)。需要說(shuō)明的是,iostream頭文件中就有srand函數(shù)的定義,不需要再額外引入stdlib.h;而使用time()函數(shù)需要引入ctime頭文件2013-10-10C語(yǔ)言詳細(xì)分析講解內(nèi)存管理malloc realloc free calloc函數(shù)的使用
C語(yǔ)言內(nèi)存管理相關(guān)的函數(shù)主要有realloc、calloc、malloc、free等,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言內(nèi)存管理realloc、calloc、malloc、free函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-05-05