Я хочу запустить фоновое задание Python из bash-скрипта и затем аккуратно убить его с помощью SIGINT. Это прекрасно работает из оболочки, но я не могу заставить его работать в сценарии.
loop.py:
#! /usr/bin/env python
if __name__ == "__main__":
try:
print 'starting loop'
while True:
pass
except KeyboardInterrupt:
print 'quitting loop'
Из оболочки я могу ее прервать:
$ python loop.py &
[1] 15420
starting loop
$ kill -SIGINT 15420
quitting loop
[1]+ Done python loop.py
kill.sh:
#! /bin/bash
python loop.py &
PID=$!
echo "sending SIGINT to process $PID"
kill -SIGINT $PID
Но по сценарию я не могу:
$ ./kill.sh
starting loop
sending SIGINT to process 15452
$ ps ax | grep loop.py | grep -v grep
15452 pts/3 R 0:08 python loop.py
И, если он был запущен из скрипта, я больше не могу убить его из оболочки:
$ kill -SIGINT 15452
$ ps ax | grep loop.py | grep -v grep
15452 pts/3 R 0:34 python loop.py
Я предполагаю, что мне не хватает тонкой точки управления работой bash.