[ Содержание ]
Если «родитель» завершает свою работу раньше потомка, у потомка меняется значение PPID на 1, то есть потомок продолжает работу, но уже с новым родителем. Процесс с PID 1 — это программа init. Init запускается самим ядром операционной системы при её старте. До тех пор пока работает init, работает Linux.
Правда, существуют исключения из этого правила. Если завершает работу программа-оболочка, в которой работал пользователь, завершают работу все программы, запущенные из этого экземпляра shell.
При необходимости продолжения выполнения программы после выхода пользователя из системы используют программу nohup.
nohup программа [параметры программы]...
При завершении работы управляющей оболочки все программы получают уведомление об отключении от терминала и должны завершить свою работу. Nohup заставляет программу игнорировать получаемое уведомление, и она (программа) продолжает свою работу даже после завершения работы оболочки.
Запуск программы происходит следующим образом:
nohup program &
Программа запускается. Отключается от терминала. Получает нового родителя — процесс init. Всё это демонстрирует вывод следующей программы.
$ ps -eo pid,ppid,tty,cmd | grep program 4955 1 ? program $
После запуска, nohup создаёт файл nohup.out в который помещает то, что программа выводила на стандартный вывод или вывод ошибки.
[ Содержание ]