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

來源:互聯網
上載者:User

標籤:

python的os module中有fork()函數用於產生子進程,產生的子進程是父進程的鏡像,但是它們有各自的地址空間,子進程複製一份父進程記憶體給自己,兩個進程之間的執行是相互獨立的,其執行順序可以是不確定的、隨機的、不可預測的,這點與多線程的執行順序相似。 
import osdef 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‘:            breakparent()

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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.