ちょっと面白いことが起こった
プロセスのfork()を使ってプログラムを組んで実行していた.
プロセスをforkして親は5秒後に死ぬ.
つまり子プロセスの親がinit=1になるところを見ようとした.
#! /usr/bin/python3.12
import os, time
ret = os.fork()
if ret > 0:
print("親は5秒後に死亡")
time.sleep(5)
os._exit(0)
while True:
print(
f"私={os.getpid()} 親={os.getppid()}"
)
time.sleep(1)
したら,こうなった.
確かに親は1になったけど,Ctrl+cをしても止まらなくなった.
$ ./kill_parent.py 親は5秒後に死亡 私=663675 親=663674 私=663675 親=663674 私=663675 親=663674 私=663675 親=663674 私=663675 親=663674 $ 私=663675 親=1 私=663675 親=1 私=663675 親=1 私=663675 親=1 ^C $ 私=663675 親=1 私=663675 親=1 kil私=663675 親=1 l 私=663675 親=1 66私=663675 親=1 36私=663675 親=1 75私=663675 親=1 $
原因は,
- 子プロセスがinitに引き取られた後も標準出力の端末が変わっていなかったこと
- そもそも親が死んだ時点で,子供も死んでいなかったこと
親が死んだら子供も死ぬ仕組みって大事なんだなぁ🤔
これからは親子共々殺さないとね(字面ヤバ)

