シェルスクリプトが終了したときにシェルスクリプトが実行されているPythonプロセスを終了する方法は?

シェルスクリプトが終了したときにシェルスクリプトが実行されているPythonプロセスを終了する方法は?

Pythonを実行するシェルスクリプトがあります。

起動ファイル

# Setup environment
cd ~/foobar/ && \
    python3 -m venv env && \
    source env/bin/activate && \
    pip install -q -r requirements.txt && \
    find . -maxdepth 1 -type f -name "*.py" | xargs pylint

# Run scripts
python ~/foobar/main.py

ctrl+c端末に存在する場合、Pythonは正しく閉じられます。しかし、そうするとpkill -9 start.shメッセージが表示されますが、KilledPythonはまだ実行中です。呼び出しスクリプトが終了したらPythonスクリプトを終了する方法はありますか?

ベストアンサー1

興味深い質問:Pythonスクリプトを殺すことは何ですか?これを使用してbashプロセスを終了すると、間違いなくSIGKILLPythonスクリプトには何もしません。

デフォルトのbashプロセスがまだ存在するか定期的にチェックするバックグラウンドプロセスを開始し、消えた場合はPythonスクリプトを終了できます。

Pythonスクリプトを変更できる場合は、定期的に親エントリが消えていることを確認し(最も簡単な方法:親PIDが1であることを確認して)、自己終了できます。このように誤ってチェッカーを殺しても問題は発生しません...

最善の解決策はおそらく2つのスクリプト内にあるでしょう。 bashスクリプトを(一般または一時参照man systemd-run)SystemDサービスとして実行し、それを使用してsystemctlスクリプトを終了できます(つまり、cgroup全体を終了します)。

おすすめ記事