我想从一个bash脚本中启动一个后台Python作业,然后使用SIGINT优雅地杀掉它。这在shell中很好用,但我似乎无法在脚本中使其工作。
loop.py:
#! /usr/bin/env python
if __name__ == "__main__":
try:
print 'starting loop'
while True:
pass
except KeyboardInterrupt:
print 'quitting loop'
从 shell 中我可以中断它:
$ 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
如果它是从脚本启动的,我就无法从Shell中杀死它了:
$ kill -SIGINT 15452
$ ps ax | grep loop.py | grep -v grep
15452 pts/3 R 0:34 python loop.py
我认为我缺少一些 bash 作业控制的细节。