python的os module中有fork()函數用於生成子進程,生成的子進程是父進程的鏡像,可是它們有各自的地址空間,子進程複製一份父進程內存給本身,兩個進程之 間的執行是相互獨立的,其執行順序能夠是不肯定的、隨機的、不可預測的,這點與多線程的執行順序類似。 python
import os def child(): print 'A new child:', os.getpid() print 'Parent id is:', os.getppid() os._exit(0) def parent(): while True: newpid=os.fork() print newpid if newpid==0: child() else: pids=(os.getpid(),newpid) print "parent:%d,child:%d"%pids
print "parent parent:",os.getppid()
if raw_input()=='q': break parent()
在咱們加載了os模塊以後,咱們parent函數中fork()函數生成了一個子進程,返回值newpid有兩個,一個爲0,用以表示子進程,一個是大於 0的整數,用以表示父進程,這個常數正是子進程的pid. 經過print語句咱們能夠清晰看到兩個返回值。若是fork()返回值是一個負值,則代表子進程生成不成功(這個簡單程序中沒有考慮這種狀況)。若是 newpid==0,則代表咱們進入到了子進程,也就是child()函數中,在子進程中咱們輸出了本身的id和父進程的id。若是進入了else語句, 則代表newpid>0,咱們進入到父進程中,在父進程中os.getpid()獲得本身的id,fork()返回值newpid表示了子進程的id,同時咱們輸出了父進程的父進程的id. 經過實驗咱們能夠看到if和else語句的執行順序是不肯定的,子、父進程的執行順序由操做系統的調度算法來決定。算法