我覺得關於子進程和父進程還是比較難理解的,所以分成兩部分來分析
一、先來理解子進程和父進程的工作原理
在Python中,使用os.fork()之後,在內存中把父進程的代碼及內存分配情況拷貝一份生成子進程的運行空間,這樣子進程的所有代碼都與父進程一樣,兩個進程之間的運行是獨立的,互不影響。在父進程中獲取到的pid是子進程的pid號,在子進程中獲取的pid是0,所以下程序運行出的結果可以看出,子進程輸出的pid是0,父進程輸出的pid是子進程的id號2381。當運行os.fork()這個腳本時,會有兩個獨立的運行空間來執行,在父進程運行空間中執行如下程序,由於讀取到的pid是子進程的id號,非零,所以輸出“this is parent pid= 2381”;而在子進程的運行空間中執行如下程序,當讀到pid時,os.fork()返回的是0,所以運行if語句塊,輸出“this is child pid= 0”。
#! /usr/bin/env python3
import os
pid = os.fork()
if (pid==0):
print("this is child pid= {}".format(pid))
else:
print("this is parent pid = {}".format(pid))
輸出結果:
os.fork()是一次調用,兩次返回,在父進程的運行空間返回子進程的id號,在子進程空間返回id號爲0
二、再看看在Python中的getpid(),getppid()的用法及含義
#! /usr/bin/env python3
import os
pid = os.fork()
getpid = os.getpid()
getppid = os.getppid()
if (pid==0):
print("this is child pid= {}, getpid= {}, getppid={}".format(pid, getpid, getppid))
else:
print("this is parent pid = {}, getpid={}".format(pid, getpid))
輸出結果: