用模板的方式創(chuàng)建守護(hù)進(jìn)程代碼實(shí)例
#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ù),他的返回值,會(huì)被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()的返回時(shí)間比其父進(jìn)程調(diào)用exit(0)的時(shí)間早,將不會(huì)被init()進(jìn)程領(lǐng)養(yǎng)。以后我們會(huì)用管道的特點(diǎn)來(lái)同步父子進(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)文章
hi 感恩節(jié)——Linux基礎(chǔ)教程之mysql和php
這篇文章主要介紹了hi 感恩節(jié)——Linux基礎(chǔ)教程之mysql和php的相關(guān)資料,需要的朋友可以參考下2015-11-11shell批量創(chuàng)建文件并重新命名的實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于shell批量創(chuàng)建文件并重新命名的相關(guān)資料,文中還介紹了批量刪除文件以及文件更名的多種方法,每種方法都給出了詳細(xì)實(shí)例代碼,需要的朋友可以參考下2021-07-07對(duì)用戶輸入的判斷的shell實(shí)現(xiàn)代碼
今天的案例是將 對(duì)用戶輸入的判斷的shell腳本,需要的朋友可以參考下2016-08-08淺談ubuntu 中sudo update與upgrade的作用及區(qū)別
下面小編就為大家?guī)?lái)一篇淺談ubuntu 中sudo update與upgrade的作用及區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03Shell腳本對(duì)比兩個(gè)文本文件找出不同行的2個(gè)方法分享
這篇文章主要介紹了Shell腳本對(duì)比兩個(gè)文本文件找出不同行的2個(gè)方法分享,本文分別使用comm命令法、grep命令法實(shí)現(xiàn),需要的朋友可以參考下2014-12-12Shell腳本字符串單引號(hào)和雙引號(hào)的區(qū)別淺析
這篇文章主要介紹了Shell腳本字符串單引號(hào)和雙引號(hào)的區(qū)別淺析,,并羅列了一些字符串的操作方法,需要的朋友可以參考下2014-07-07linux shell 中數(shù)組的定義和for循環(huán)遍歷的方法
今天小編就為大家分享一篇linux shell 中數(shù)組的定義和for循環(huán)遍歷的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06