linux 守護進程(daemon)的建立方法

來源:互聯網
上載者:User
用C語言來建立守護進程方法大致如下:

  1. int init_daemon(const char *pathname)
  2. {
  3.     struct sigaction act;
  4.     int max_fd, i, ret;
  5.     char buf[100];

  6.     /* 第一次調用fork,為setsid做準備 */
  7.     ret = fork();
  8.     if( 0 > ret )
  9.     {
  10.         fprintf(stderr, "error in first fork./n");
  11.         exit(1);
  12.     }
  13.     else if( 0 != ret) /* 父進程退出 */
  14.         exit(0);
  15.     
  16.     /* 第一次fork的子進程部分 */
  17.    
  18.     /* 調用setsid,使得進程與舊會話過程相分離 */
  19.     ret = setsid();
  20.     if( 0 > ret )
  21.         exit(1);
  22.     
  23.     /* 忽略訊號SIGHUP */ 
  24.     act.sa_handler = SIG_IGN;
  25.     sigemptyset(&act.sa_mask);
  26.     act.sa_flags = 0;
  27.     sigaction(SIGHUP, &act, NULL);

  28.     /* 第二次fork,使得進程不再是會話過程的領頭進程,不能開啟終端作偽自己的控制終端*/
  29.     ret = fork();
  30.     if(0 > ret)
  31.          exit(1);
  32.     else if( 0 != ret ) /* 父進程退出 */
  33.          exit(0);

  34.     /* 第二次fork的子進程部分 */

  35.     /* 修改進程的目前的目錄 */
  36.     chdir("/");
  37.     /* 清除進程的檔案掩碼 */
  38.     umask(0);
  39.     /* 使得進程退出原來的進程組,不受原來進程組的幹擾 */
  40.     setpgrp();

  41.     /* 關閉進程所有的檔案描述符 */
  42.     max_fd = sysconf(_SC_OPEN_MAX);
  43.     for(i = 0; i < max_fd; i++)
  44.         close(i);
  45.     /* 開啟空裝置,讓原來的輸入輸出移到該裝置處 */
  46.     open("/dev/null", O_RDWR);
  47.     dup(1);
  48.     dup(2);
  49.     
  50.     /* 開啟系統日誌 */
  51.     openlog(pathname, LOG_PID, 0);

  52.     return 0;
  53. }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.