👻

親プロセス 子プロセス

に公開
  • プロセスはforkと呼ばれる操作を行うことで、他のプロセスを生成することができる。

  • 親プロセス

    • 新しいプロセスを生成したプロセス
  • 子プロセス

    • 新しく生成されたプロセス。ほとんど親プロセスのコピーであるが、プロセスID(PID)が異なる。

親プロセス/子プロセスのPID

以下のようなコードで、親プロセスと子プロセスのプロセスID(PID)が異なることを確認できる

fork.py
import os 

# fork()で、親プロセスを複製する形で子プロセスを生成
# fork()が実行される前は1つだったプロセスが、実行後は2つ(親プロセス・子プロセス)に分裂する。
# 分裂したそれぞれのプロセスが、fork()の後ろの残りのプログラムを実行していく
# fork()の戻り値pid↓
 # 親プロセスで実行された場合:新しく生成された子プロセスのPID
 # 子プロセスで実行された場合:0

pid = os.fork()

# 親プロセス
if pid > 0: 
    # getpid()は現在のプロセスのPIDを返す
    print("Fork above 0, PID:", os.getpid())
    # 親プロセスで実行された場合、pidには新しく生成された子プロセスのPIDが代入されている
    print("Spawned child's PID:", pid) 

# 子プロセス
else:
    print("Fork is 0, this is a Child PID:", os.getpid()) 
    # getppid()は現在のプロセスの親プロセスのPIDを返す
    print("Parent PID:", os.getppid()) 
ターミナル
$ python3 fork.py
Fork above 0, PID: 81303
Spawned child's PID: 81304
Fork is 0, this is a Child PID: 81304
Parent PID: 81303

参考

https://wa3.i-3-i.info/diff616process.html

Discussion