Почему мы демонизируем процессы?

Почему мы демонизируем процессы?

Я читал и понял, как создать процесс-демон, но из всего, что я читал, я так и не понялпочемуэто необходимо сделать.

Я читал, что мы делаем fork - setsid - fork, чтобы избежать процесса, чтобы получить контроль над терминалом, но что это значит? Если я запускаю программу в фоновом режиме с помощью & (например, './script &' ), что отличает выполнение этого процесса от того, если бы я запустил обычную программу, которая превращается в демона?

Означает ли это, что если я выйду из системы, фоновый процесс остановится, а демон продолжит работу? Мне действительно сложно понять, что такое «получение управления терминалом».

Причина, по которой это меня беспокоит, заключается в том, что я работаю над встроенным RPi на роботе, и мне нужно, чтобы программы запускались при загрузке. В настоящее время я просто запускаю их из rc.local с помощью такой команды su user -c 'python /home/user/launcher.py &' &. У меня никогда не было проблем с запуском программы при загрузке (я даже вижу процесс, использующий ps -eSSH при подключении к RPi), но я хотел бы знать, есть ли какой-либо риск / является ли это плохой практикой.

решение1

Это больше, чем один вопрос, на каждый можно дать длинный ответ. Кратко

  • Если я запускаю программу в фоновом режиме с помощью & (например, './script &'), чем выполнение этого процесса отличается от обычного запуска программы, которая превращается в демона?

    Запуск программы в фоновом режиме больше не контролируется напрямую терминалом (вы не можете просто управлять ^Cею), но она все еще может писать в терминал и мешать вашей работе. Обычно демон отделяет себя от терминала (в дополнение к разветвлению), и его вывод/ошибка будут перенаправлены в файлы.

  • Означает ли это, что если я выйду из системы, фоновый процесс остановится, а демон продолжит работу?

    Фоновый процесс можно защитить, nohupно если его вывод не перенаправлен, закрытие терминала не позволит ему писать, что приведет к ошибке, которая, скорее всего, остановит его.

  • Я хотел бы узнать, есть ли какой-либо риск/является ли это плохой практикой.

    Помимо проблемы отслеживания вывода программы (и сообщений об ошибках), есть проблема ее перезапуска, если она вдруг умрет. Скрипт службы вписывается в то, как спроектированы другие службы в системе, предоставляя более/менее стандартный способ управления демоном.

Связанный контент