как сделать демон процесса

я пытаюсь понять, как я могу сделать мою программу демоном. Я столкнулся с некоторыми вещами, с которыми я столкнулся. В общем, программа выполняет следующие шаги, чтобы стать демоном:

  1. Вызов fork () .
  2. В родительском элементе вызовите exit () . Это гарантирует, что исходный родитель (демон

    Я пытаюсь понять, как я могу сделать свою программу демоном. Вот некоторые вещи, с которыми я столкнулся. В общем, программа выполняет следующие шаги, чтобы стать демоном:

    1. Вызов fork () .
    2. В родительском элементе вызовите exit () . Это гарантирует, что исходный родитель (демон

      Я пытаюсь понять, как я могу сделать свою программу демоном. Вот некоторые вещи, с которыми я столкнулся. В общем, программа выполняет следующие шаги, чтобы стать демоном:

      1. Вызов fork () .
      2. В родительском элементе вызовите exit () . Это гарантирует, что исходный родитель (демон дедушка и бабушка) удовлетворен тем, что его дочерний элемент завершен, а родитель демона не дольше работает, и что демон не является лидером группы процессов. Этот последний пункт является требованием для успешного завершения следующего шага.

      3. Вызов setsid () , давая демону новую группу процессов и сеанс, оба из у которых он как лидер. Это также гарантирует, что процесс не связан управляющий терминал (поскольку процесс только что создал новую сессию и не будет назначать one).

      4. Измените рабочий каталог на корневой с помощью chdir () . Готово потому что унаследованный рабочий каталог может находиться в любом месте файловой системы. Демоны, как правило, работают на время безотказной работы системы, а вы не хотите чтобы оставить случайный каталог открытым и, таким образом, предотвратить доступ администратора размонтирование файловой системы, содержащей этот каталог.

      5. Закройте все файловые дескрипторы.

      6. Открытые файловые дескрипторы 0, 1 и 2 (стандартный вход, стандартный выход и стандартная ошибка) и перенаправить их на / dev / null .
      #include <sys/types.h>
      #include <sys/stat.h>
      #include <stdlib.h>
      #include <stdio.h>
      #include <fcntl.h>
      #include <unistd.h>
      #include <linux/fs.h>
      
      int main (void)
      {
          pid_t pid;
          int i;
      
          /* create new process */
          pid = fork ( );  
          if (pid == -1)  
              return -1;  
          else if (pid != 0)  
              exit (EXIT_SUCCESS);  
      
          /* create new session and process group */  
          if (setsid ( ) == -1)  
              return -1;  
      
          /* set the working directory to the root directory */  
          if (chdir ("/") == -1)  
              return -1;  
      
          /* close all open files--NR_OPEN is overkill, but works */  
          for (i = 0; i < NR_OPEN; i++)  
              close (i);  
      
          /* redirect fd's 0,1,2 to /dev/null */  
          open ("/dev/null", O_RDWR);  
          /* stdin */  
          dup (0);  
          /* stdout */  
          dup (0);  
          /* stderror */  
      
          /* do its daemon thing... */  
      
          return 0;  
      }

      Кто-нибудь может дать мне ссылку на существующий исходный код какой-нибудь программы, такой как Apache, чтобы я мог понять этот процесс более глубоко.

67
задан user 11 April 2014 в 16:41
поделиться