Я пытаюсь понять, почему сигналы не передаются должным образом при этой настройке.
Простой тест, у меня есть скрипт на python, который регистрирует обработчик sigterm и печатает, если он его получает. Я подтвердил, что это работает, если я запускаю его и отправляю СРОК.
Тем не менее, я использую этот подпроцесс python с useShell = True. useShell запускает команду с / bin / sh -c ...
Если я это сделаю, то на самом деле это тоже работает:
$/bin/sh -c "python ~/tmpcode/signal_test.py" &
[8] 6207
$ kill 6207
signum 15
Однако у меня есть сценарии, которые выполняют цепочечные команды, т.е. /foo/bar.sh; some_other_script.py. В этом случае сигнал не передается в окончательный сценарий:
$ /bin/sh -c "echo foo; python ~/tmpcode/signal_test.py" &
[8] 8015
$ kill 8015
То же самое происходит, если я пытаюсь использовать && вместо;
Я пытаюсь понять, что здесь происходит, и есть ли способ получить сигнал для прохождения.
Побочный момент: Основная причина, по которой скрипт запускает многоцепочечные команды, заключается в том, что первая команда устанавливает некоторую среду для использования второй.
signal_test.py:
import time
import signal
import sys
def handler( signum, frame ):
print( "signum %d\n" % signum )
sys.exit(signum)
signal.signal( signal.SIGTERM, handler )
time.sleep(60)