スクリプトを終了しますが、現在実行中のプログラムが終了することを許可します。

スクリプトを終了しますが、現在実行中のプログラムが終了することを許可します。

無限のwhileループでコマンドを実行するbashスクリプトがあります。スクリプトは次のとおりです。

while :
do
     python3 my_program.py
done

Pythonプロセスを中断せずに端末でこのwhileループを終了する簡単な方法はありますか?つまり、Pythonプロセスが完了し、ループが終了します。

つまり、次のようになります。終了条件が端末入力であるwhileループはありますか?

答え1

SIGINTスクリプトをキャプチャし、ループ終了条件を設定できます。プログラムを実行するsetsidSIGINT+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実際に殺すのではなく、殺したり殺したりしないものがなければ、失敗コードで終了するという意味です。

関連情報