から切り離されていない私は、以下の単純化されたスクリプトがあります。プロセスはnohupをと始めた親
Pythonのtest.py
を:
import subprocess, os
def run_background_process(script_name):
with open(os.devnull, 'w') as FNULL:
background_process = subprocess.Popen(['nohup', '{}'.format(script_name)], stdout=FNULL
, stderr=FNULL
, stdin=FNULL)
return background_process
while True:
run_background_process('test.sh')
time.sleep(500)
のBashシェルスクリプトtest.sh
:
#!/bin/bash
n=1
echo ${n}
sleep 30
そしてps -ef
結果は次のとおりです。
15536 16555 0 14:18 test.py
15541 15536 0 14:18 test.sh
私はなぜtest.sh
がtest.py
から切り離されておらず、まだtest.py
の子ですか?
私の主張は、親が殺されたときに子供が実行を継続することです。これは上のケースでは起こっていません。子に永遠のループを置くと、親が殺されたときにも終了します。 – CuriousGuy
@CuriousGuyあなたはctrl-Cで親を殺していますか? – VPfB
はい、今はこれが問題だとわかります...子供は親が正常に出る場合にのみ生きるでしょう、そうですか? – CuriousGuy