用模板的方式創(chuàng)建守護(hù)進(jìn)程代碼實例
#include "wrap.h"
#define MYDOMAIN_FLAG "/tmp/.mydomain_log"
void domain_end(){
Unlink(MYDOMAIN_FLAG);
}
int domain_init(){
int fd;
fd=open(MYDOMAIN_FLAG,O_RDWR|O_CREAT|O_EXCL|O_APPEND,0600);
if(fd==-1)
err_sys(errno,"domain faild, %s",MYDOMAIN_FLAG);
Dup2(fd,1);
Dup2(fd,2);
return fd;
}
/*
功能:
work函數(shù)為我們的工作函數(shù),他的返回值,會被init()系統(tǒng)進(jìn)程收集作為守護(hù)的退出碼
參數(shù):
argc,argv均為入口函數(shù)main()的參數(shù)副本。
*/
int work(int argc,char **argv){
while(1){
sleep(60);
err_msg("one loop....");
}
return 0;
}
int start_domain(int argc,char **argv,int (*work)(int argc,char **argv)){
pid_t pid;
int fd,ecode;
fd=domain_init();
if(Fork()==0){
if(Fork()==0){
Atexit(domain_end);
err_msg("domain has ran sucessfully....");
/*如果work()的返回時間比其父進(jìn)程調(diào)用exit(0)的時間早,將不會被init()進(jìn)程領(lǐng)養(yǎng)。以后我們會用管道的特點來同步父子進(jìn)程。*/
ecode=work(argc,argv);
exit(ecode);
}
exit(0);
}
Wait(NULL);
return 0;
}
int main(int argc,char **argv){
return start_domain(argc,argv,work);
}
相關(guān)文章
一個簡潔的全自動安裝LNMP服務(wù)器環(huán)境的Shell腳本分享
這篇文章主要介紹了一個簡潔的全自動安裝LNMP服務(wù)器環(huán)境的Shell腳本分享,本文腳本在生產(chǎn)環(huán)境上使用了一年多,腳本代碼簡單唯美,需要的朋友可以參考下2014-12-12
監(jiān)視磁盤使用情況的Shell腳本(本地+遠(yuǎn)程)
任何一個分區(qū)使用到90%就發(fā)送一個郵件給指定的收件人,到95%就在郵件主題出警告(warning),說明發(fā)送郵件程序EMAIL2013-01-01
bash?shell?自定義函數(shù)命令持久化生效問題
這篇文章主要介紹了bash?shell?自定義函數(shù)命令持久化生效,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
shell腳本實現(xiàn)監(jiān)控某個進(jìn)程意外停止后拉起進(jìn)程
今天小編就為大家分享一篇關(guān)于shell腳本實現(xiàn)監(jiān)控某個進(jìn)程意外停止后拉起進(jìn)程,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04

