Я помогал коллеге, у которого были проблемы с фоновым процессом, периодически умирая.
Я обнаружил, что они запускают фоновый процесс, войдя на сервер и выполнив:
su - <user> -c '<command>' &
«Ага», воскликнул я. «Если вы начнете команду с« & », она будет зависать при выходе из управляющего терминала. Для этого вам нужно использовать что-то вроде nohup. Действительно, этот процесс должен поддерживать работу в качестве демона, а не в тот момент».
Мы протестировали приведенную выше команду, чтобы продемонстрировать мою точку зрения, и ... она работала: процесс, запущенный командой , не завершился, когда мы вышли из терминала, который выполнил указанную выше команду.
команда - это пользовательский скрипт Python, чей вывод идет в файл. Насколько я могу судить, в скрипте нет интеллектуальных возможностей, подобных демонам. Он не выполняет никаких действий, необходимых для запуска в качестве демона, перечисленных на странице Википедии: Демон (вычисления): Создание .
Запуск команды выглядит так, как ожидается:
<command> &
exit
В вышеприведенном случае фоновый процесс, запущенный командой, завершается, когда мы выходим из терминала.
У меня вопрос такой:
Что происходит, когда мы добавляем «su - -c &», который предотвращает выход процесса при выходе из нашего терминала. Я хотел бы понять в деталях относительно терминала управления, стандартного ввода и вывода и т. Д.
Это разумный способ для достижения цели запуска этой команды в качестве фонового процесса. Если нет, то почему?
Я хочу распространять лучшие практики в своей компании, но я должен быть в состоянии продемонстрировать и поддержать любые мои рекомендации.
Я тоже хочу понять, что именно происходит.
источник
chroot --userspec root:root / sh -c "exec some_forever_process" &
. Задание выполняется от имени того же пользователя, без явногоnohup
до илиdisown
после. Так что для этого случая, как это сигнал не может быть доставлен на срок выхода?some_forever_process
предназначался для запуска навсегда (демон) и поэтому защищает себя от получения SIGHUP с выхода терминала (запуская в своей собственной группе процессов).