Bash

殺死腳本,但允許目前正在執行的程序退出

  • August 15, 2019

我有一個 bash 腳本在無限循環中執行命令。該腳本看起來像:

while :
do
    python3 my_program.py
done

有沒有一種簡單的方法可以以不中斷 python 程序的方式從終端終止這個 while 循環?即python程序將完成,然後循環終止。

換一種說法,也許是:是否有一個 while 循環的終止條件是某個終端輸入?

您可以陷入SIGINT腳本並設置循環退出條件。執行您的程序setsid會阻止它SIGINTCTRL+接收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意味著不要真正殺死,但如果沒有(不)殺死的東西,則以失敗的程式碼退出。

引用自:https://unix.stackexchange.com/questions/535409