Есть ли разница в вызове daemon (0,0) из программы, запуске программы в фоновом режиме и перенаправлении ее вывода - PullRequest
2 голосов
/ 03 июня 2010

Есть ли разница между наличием следующего кода в начале программы 'progX'

if(daemon(0, 0) == -1)
{
    printf("daemon error: %s", strerror(errno));
}

или выполнением 'progX' с помощью команды: progX & 2> / dev / null 1> / dev/ null 0> / dev / null

Ответы [ 3 ]

5 голосов
/ 03 июня 2010

daemon() делает несколько вещей:

  • Перепроверяет процесс к init, разветвляясь и затем выходя из родителя Загляните в список ps и вы увидите, что демоны принадлежат PID 1.
  • Звонки setsid().
  • Изменяет каталог на /.
  • Перенаправляет стандартный ввод, вывод и ошибку на /dev/null.

Ваши перенаправления обрабатывают последнее действие, но не остальные.

1 голос
/ 03 июня 2010
progX & 2>/dev/null 1>/dev/null 0>/dev/null

stdin (0) является вводом. Не выводится. Запуск демона должен закрывать 0,1,2 - фактически все открытые дескрипторы файлов сразу после того, как он отключился от родительского процесса. Поэтому я не понимаю, почему вы хотите перенаправить сообщения об ошибках при запуске демона в /dev/null.

Что блокирует любые сообщения, которые вы можете получить от ProgX. Лучше всего просто запустить ProgX, как вы написали.

fprintf(stderr, "daemon error %s\n", strerror(errno));

может быть лучше - ошибки идут в stderr, вывод printf в stdout.

0 голосов
/ 03 июня 2010

демон chdirs to / демон закрывает все фдс

так что вам нужно будет

cd /
progX ....

чтобы оно было таким же

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...