無限のwhileループでコマンドを実行するbashスクリプトがあります。スクリプトは次のとおりです。
while :
do
python3 my_program.py
done
Pythonプロセスを中断せずに端末でこのwhileループを終了する簡単な方法はありますか?つまり、Pythonプロセスが完了し、ループが終了します。
つまり、次のようになります。終了条件が端末入力であるwhileループはありますか?
答え1
SIGINT
スクリプトをキャプチャし、ループ終了条件を設定できます。プログラムを実行するsetsid
とSIGINT
+CTRLC
#! /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
答え2
プロセスをバックグラウンドに置き、次のループを開始する前にプロセスが完了するのを待つことができます。これにより、Pythonプロセスを終了せずにループを終了できます。
while : ; do
python3 my_program.py &
while true; do
kill -0 %1 || break
sleep 1
done
done
その後、C-C
(ctrl-c) ループを中断します。
kill -0
実際に殺すのではなく、殺したり殺したりしないものがなければ、失敗コードで終了するという意味です。