Остановить выполнение скрипта Python, когда родительский скрипт Bash будет убит - PullRequest
4 голосов
/ 16 апреля 2010

Я работаю над сценарием оболочки Bash, который запускает несколько сценариев Python, например:

cd ${SCRIPT_PATH}
python -u ${SCRIPT_NAME} ${SCRIPT_ARGS} >> $JOBLOG 2>&1

В какой-то момент я убил скрипт оболочки (используя kill PID), но скрипт Python продолжал работать, даже после того, как скрипт завершился. Я думал, что они умрут, как только основной сценарий умер. Что я неправильно понимаю в скриптах Bash, и что я могу сделать, чтобы получить нужную функциональность? Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 16 апреля 2010

Вам необходимо установить обработчик сигнала на , позаботиться о ваших дочерних процессов:

trap "echo killing childs; pkill -P $$"  EXIT
1 голос
/ 16 апреля 2010

Дети должны быть отправлены SIGHUP, когда родительский процесс умирает - однако:

a) Дочерний процесс может игнорировать SIGHUP или обрабатывать его несмертельно.

b) Ребенок может отсоединиться от родительского процесса с помощью fork () и стать лидером группы процессов.

Вы можете просто exec код Python, чтобы заменить оболочку на Python.

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