Ваша программа Python отменяет nohup.

Ваша программа Python отменяет nohup.

Я попробовал запустить скрипт оболочки через удаленный сеанс, который запускает процесс в фоновом режиме с помощью команды.

nohup python3 run.py > nohup.out &

При закрытии удаленного сеанса процесс завершается с сообщением:

Пойман сигнал SIGHUP

SIGHUP пойман, но не демонизирован. Выход.

Я не понимаю, почему процесс завершается, если он был запущен в фоновом режиме с помощьюнет и?

решение1

Ваша программа Python отменяет nohup.

nohupигнорирует сигнал зависания, SIG_IGNа затем последовательно загружает вашу программу в тот же процесс.

Ваша программа Pythonбыстро сбрасываетобработка сигнала для сигнала hangup, установка собственного обработчика сигнала. Этот обработчик проверяет внутреннюю функцию (которая не очень хорошо спроектирована, поскольку основана на некоторых ошибочных предположениях, если это та, которую я видел) и решает, что правильным курсом действий при получении сигнала hangup будет распечатать это сообщение и выйти.

Ваша программа Python по своей природе не является nohup-able. В системе с оболочкой управления заданиями и семантикой сеанса/задания POSIX вам нужно ing disownзадание так, чтобы оболочка никогда не узнала о нем, чтобы послать ему сигнал зависания в первую очередь.

(Даже этого недостаточно для операционных систем systemd. Поскольку разработчики systemd немного испортили свой механизм сеансов входа в пользовательское пространство, вам также необходимо убедиться, что механизм systemd, который подает сигнал о завершении работы системы, а не о зависании, для сеансов входа при каждом выходе из системы, также не срабатывает.)

дальнейшее чтение

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