首頁  >  文章  >  後端開發  >  python中fork()函數產生子程序分析

python中fork()函數產生子程序分析

高洛峰
高洛峰原創
2016-10-18 10:02:311081瀏覽

python的os module中有fork()函數用於生成子進程,生成的子進程是父進程的鏡像,但是它們有各自的地址空間,子進程複製一份父進程內存給自己,兩個進程之間的執行是相互獨立的,其執行順序可以是不確定的、隨機的、不可預測的,這點與多執行緒的執行順序相似。

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語句的執行順序是不確定的,子、父行程的執行順序由作業系統的調度演算法來決定。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn