プログラム内でデーモン化する方法を学ぶ中で、コマンドライン上でバックグラウンドプロセス化する"&"とnohupを組み合わせた場合に、所属セッションリーダに対してSIGHUPが送られた際、
該当のプロセスはどのような扱いになるのか、疑問を持ちました。
以下のような図を作成してみました。(嘘が多いと思います...)
気になる点としましては、
・nohup起動されていないセッション内の各プロセスは(シェル含む)、終了すると思うが、
当該セッションは存続するのか?(少なくとも1つのプロセス(my.exe)が残っているため残ると考えている。)
・親であるシェルが終了したので、いつものようにmy.exeプロセスは孤児プロセスとなるのか?
・このときのmy.exeプロセスの状態は、デーモンプロセスと呼べるのではないか?
などがあります。
よろしくお願いいたします。
--- 追記
試しに、sleep.pyというプログラムを、nohup sleep.py &
で実行し、該当のターミナルを閉じまして、別のターミナルで確認しますと、
閉じる前
ps -A -o command,pgid,sid,ppid,tty COMMAND PGID SID PPID TTY /init 1 1 0 ? -bash 999 1091 55 pts/2 python sleep.py 1358 1091 1 ? ・・・
閉じた後
ps -A -o command,pgid,sid,ppid,tty COMMAND PGID SID PPID TTY /init 1 1 0 ? python sleep.py 1358 1091 1 ? ・・・
のように、
該当プロセスは、みたところデーモンプロセスと同じような状態(
・ppid==1
・端末に紐づいていない
)
になっていることを確認しました。
また、セッション(sid 1091)も終了することなく、そのまま sleep.py を抱えたまま存続していることがわかりました。
あなたの回答
tips
プレビュー