我想:擊:等待在後臺巨蟒過程
- 啓動一個後臺進程(python腳本)
- 運行一些命令的bash
- 然後發送控制-C關閉後臺進程一旦前臺任務完成
我已經試過的小例子 - Python的test.py
:
import sys
try:
print("Running")
while True:
pass
except KeyboardInterrupt:
print("Escape!")
猛砸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)
Thanks @Ruslan - 我能夠通過在python中重新添加信號處理程序來解決我的問題。 –