我试图:
我尝试过的最简单的例子 - Python test.py
:
import sys
try:
print("Running")
while True:
pass
except KeyboardInterrupt:
print("Escape!")
Bash test.sh
:
#!/bin/bash
python3 ./test.py &
pid=$!
# ... do something here ...
sleep 2
# Send an interrupt to the background process
# and wait for it to finish cleanly
echo "Shutdown"
kill -SIGINT $pid
wait
result=$?
echo $result
exit $result
但是bash脚本似乎挂在等待上,并且SIGINT信号没有被发送到python进程。
我正在使用Mac OS X,正在寻找适用于linux + mac上的bash的解决方案。
编辑: Bash正在发送中断,但Python在作为后台作业运行时没有捕获它们。修复了在Python脚本中添加以下内容:
import signal
signal.signal(signal.SIGINT, signal.default_int_handler)
答案 0 :(得分:0)
点SIGINT
用于终止前台进程。您应该直接使用kill $pid
来终止后台进程。
顺便说一句,kill $pid
等于kill -15 $pid
或kill -SIGTERM $pid
。
您可以使用signal
模块来处理这种情况。
import signal
import sys
def handle(signum, frame):
sys.exit(0)
signal.signal(signal.SIGINT, handle)
print("Running")
while True:
pass