サブシェルプロセスを終了しますが、親プロセスにゼロ応答コードを送信します。

サブシェルプロセスを終了しますが、親プロセスにゼロ応答コードを送信します。

大規模なリモートクラスタのエンタープライズ設定用に作成されたPythonプロジェクトで作業しています(回復/尤度機​​能は現在サポートされていません)。

Pythonスクリプトの実行中にいつでもshell / sshコマンドが中断された場合は、コマンドを手動で実行し、正常に完了した後に中断されたサブプロセスを終了しようとします。親プロセスが子プロセスから成功応答コードを受け取った場合にのみ続行されます(Pythonスクリプトコードは編集できません)。

サンプルコード:

import subprocess

try:
    response = subprocess.run(["sleep 300;"], shell=True)
    print('return code: ' + str(response.returncode))
    response.check_returncode()
    print('Command completed successfully.')
except Exception as e:
    print('Error occoured: ' + str(e))

子供を殺す:

% ps -ef | grep sleep
  501  6904  6719   0 11:45AM ttys006    0:00.03 [email protected]/.../Python bash_sleep.py
  501  6905  6904   0 11:45AM ttys006    0:00.00 sleep 300
% kill -15 6905

最終応答:

% python3 bash_sleep.py
return code: -15
Error occoured: Command '['sleep 300;']' died with <Signals.SIGTERM: 15>.

サブシェルプロセスを終了しますが、Pythonプロセスに0応答コードを送信する方法はありますか?

ベストアンサー1

これを行うために使用することはできませんが、killデバッガを接続できる場合は、それを使用して中断されたプロセスを「うまく」終了することができます。

$ python3 bash_sleep.py

他の端末で...

$ gdb --pid ${the sleep pid}
>>> call exit(0)
>>> quit

これにより、ターゲットプロセスが終了し、親プロセスにゼロが返されます。また、Cライブラリに登録されている終了ハンドラも呼び出します。

おすすめ記事