ちょっと面白いことが起こった

プロセスの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に引き取られた後も標準出力の端末が変わっていなかったこと
  • そもそも親が死んだ時点で,子供も死んでいなかったこと

親が死んだら子供も死ぬ仕組みって大事なんだなぁ🤔
これからは親子共々殺さないとね(字面ヤバ)

\ Get the latest news /

Leave a Reply

Your email address will not be published. Required fields are marked *