Bash
殺死腳本,但允許目前正在執行的程序退出
我有一個 bash 腳本在無限循環中執行命令。該腳本看起來像:
while : do python3 my_program.py done
有沒有一種簡單的方法可以以不中斷 python 程序的方式從終端終止這個 while 循環?即python程序將完成,然後循環終止。
換一種說法,也許是:是否有一個 while 循環的終止條件是某個終端輸入?
您可以陷入
SIGINT
腳本並設置循環退出條件。執行您的程序setsid
會阻止它SIGINT
從CTRL
+接收C
#! /bin/bash STOPFILE=/tmp/stop_my_program rm -f $STOPFILE trap "touch $STOPFILE" INT while [ ! -f $STOPFILE ] do setsid python3 my_program.py done rm -f $STOPFILE
您可以將該過程置於後台,然後等待該過程完成,然後再開始下一個循環。這將允許您在不終止 python 程序的情況下終止循環。
while : ; do python3 my_program.py & while true; do kill -0 %1 || break sleep 1 done done
然後只需
C-C
(ctrl-c) 即可中斷循環。
kill -0
意味著不要真正殺死,但如果沒有(不)殺死的東西,則以失敗的程式碼退出。