バックグラウンドプロセスをリロードする方法は?

バックグラウンドプロセスをリロードする方法は?

バックグラウンドで実行したいPythonスクリプトがあります。だから私はこうします:

$ nohup python script.py &

スクリプトを頻繁に変更した場合は、プロセスを終了してスクリプトを再実行する必要があります。

$ kill -9 <pid_of_bg_process>
$ nohup python script.py &

プロセスを終了せずに再ロードできますか?

答え1

短い答え - いいえ。

長い答え:実際にはPythonインタプリタを呼び出しています。インタプリタはscript.pyをロードして解析します。

スクリプトを変更すると、インタプリタはどの部分が変更されたのかわからないため、ファイルを再ロードして最初から始める必要があります。

これで、目標がPythonにスクリプトを再ロード/再起動するように指示することであれば、それをシェルスクリプトにラップできます。

#!/bin/sh
LINE="python script.py"
stop()
{
  pkill -f "$LINE"
}
clean()
{
  stop
  exit 0
}
trap stop 1
trap clean 9 15
while true
  do
    $LINE &
    wait
done

これでシェルスクリプトを起動できます(必要に応じてバックグラウンドでnohupを使用して)。 HUPシグナルを送信すると、Pythonプロセスが再開されます。

ラッパープロセスを終了すると、Pythonスクリプトも終了します。

私のスクリプトをテストしていませんが、アイデアは明確でなければなりません。

答え2

kill -USR1 PIDまたはpidof script.py-9を使用してプロセスを終了でき、-15を使用して正常に終了できます。

関連情報