linux後臺進程實例

完整代碼如下:
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<signal.h>
#include<sys/param.h>
#include<sys/stat.h>
#include<time.h>
#include<syslog.h>
int init_daemon(void)
{
   int pid;
   int i;
    /*忽略終端I/O信號與STOP信號*/
   signal(SIGTTOU,SIG_IGN);
   signal(SIGTTIN,SIG_IGN);
   signal(SIGTSTP,SIG_IGN);
   signal(SIGHUP,SIG_IGN);
   pid=fork();
   if(pid>0){
      exit(0);/*結束父進程,使得子進程成爲後臺進程。*/
   }else if(pid<0){
       return -1;
   }
   /*建立一個新的進程組,在這個新進程組中,子進程成爲這個進程組的首進程,以使該進程脫離所有終端*/
   setsid();
  /*再次新建一個子進程,退出父進程,保證該進程不是進程組長,同時讓該進程無法再打開一個新的終端*/
   pid=fork();
  if(pid>0){
       exit(0);
    }
   else if(pid<0){
     return -1;
   }
  /*關閉所有從父進程繼承的不再需要的文件描述符*/
  for(i=0;i<NOFILE;close(i++));
  /*改變工作目錄,使得進程不與任何文件系統聯繫*/
  chdir("/");
  /*將文件屏蔽字設置爲0*/
  umask(0);
  /*忽略SIGCHLD信號*/
  signal(SIGCHLD,SIG_IGN);
  return 0;

}

int main(){
  time_t now;
  init_daemon();
  syslog(LOG_USER|LOG_INFO,"測試守護進程!\n");
  while(1){
   sleep(8);
     time(&now);
     syslog(LOG_USER|LOG_INFO,"系統時間:\t\%s\t\t\n",ctime(&now));
   }

}

爲保證本實例正常運行,請配置如下內容;

#vim /etc/rsyslog.conf

最未尾增加:

user.*  /var/log/test.log

啓動rsyslog

/etc/init.d/rsyslog restart

=============================

結果如下:

root@ubuntu:/var/log# tail -f /var/log/test.log 
Apr 26 02:06:30 ubuntu daemon: 系統時間:#011Sun Apr 26 02:06:30 2015#012#011#011
Apr 26 02:06:38 ubuntu daemon: 系統時間:#011Sun Apr 26 02:06:38 2015#012#011#011
Apr 26 02:06:46 ubuntu daemon: 系統時間:#011Sun Apr 26 02:06:46 2015#012#011#011
Apr 26 02:06:54 ubuntu daemon: 系統時間:#011Sun Apr 26 02:06:54 2015#012#011#011
Apr 26 02:07:02 ubuntu daemon: 系統時間:#011Sun Apr 26 02:07:02 2015#012#011#011
Apr 26 02:07:10 ubuntu daemon: 系統時間:#011Sun Apr 26 02:07:10 2015#012#011#011
Apr 26 02:07:18 ubuntu daemon: 系統時間:#011Sun Apr 26 02:07:18 2015#012#011#011
Apr 26 02:07:26 ubuntu daemon: 系統時間:#011Sun Apr 26 02:07:26 2015#012#011#011
Apr 26 02:07:34 ubuntu daemon: 系統時間:#011Sun Apr 26 02:07:34 2015#012#011#011
Apr 26 02:07:42 ubuntu daemon: 系統時間:#011Sun Apr 26 02:07:42 2015#012#011#011
Apr 26 02:07:50 ubuntu daemon: 系統時間:#011Sun Apr 26 02:07:50 2015#012#011#011


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章