簡單分析Python中用fork()函數(shù)生成的子進(jìn)程
python的os module中有fork()函數(shù)用于生成子進(jìn)程,生成的子進(jìn)程是父進(jìn)程的鏡像,但是它們有各自的地址空間,子進(jìn)程復(fù)制一份父進(jìn)程內(nèi)存給自己,兩個(gè)進(jìn)程之 間的執(zhí)行是相互獨(dú)立的,其執(zhí)行順序可以是不確定的、隨機(jī)的、不可預(yù)測的,這點(diǎn)與多線程的執(zhí)行順序相似。
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函數(shù)中fork()函數(shù)生成了一個(gè)子進(jìn)程,返回值newpid有兩個(gè),一個(gè)為0,用以表示子進(jìn)程,一個(gè)是大于 0的整數(shù),用以表示父進(jìn)程,這個(gè)常數(shù)正是子進(jìn)程的pid. 通過print語句我們可以清晰看到兩個(gè)返回值。如果fork()返回值是一個(gè)負(fù)值,則表明子進(jìn)程生成不成功(這個(gè)簡單程序中沒有考慮這種情況)。如果 newpid==0,則表明我們進(jìn)入到了子進(jìn)程,也就是child()函數(shù)中,在子進(jìn)程中我們輸出了自己的id和父進(jìn)程的id。如果進(jìn)入了else語句, 則表明newpid>0,我們進(jìn)入到父進(jìn)程中,在父進(jìn)程中os.getpid()得到自己的id,fork()返回值newpid表示了子進(jìn)程的id,同時(shí)我們輸出了父進(jìn)程的父進(jìn)程的id. 通過實(shí)驗(yàn)我們可以看到if和else語句的執(zhí)行順序是不確定的,子、父進(jìn)程的執(zhí)行順序由操作系統(tǒng)的調(diào)度算法來決定。
相關(guān)文章
通過Python中的http.server搭建文件上傳下載服務(wù)功能
通過本文我們學(xué)習(xí)了如何使用Python的http.server模塊搭建一個(gè)基本的HTTP服務(wù)器,并實(shí)現(xiàn)文件下載服務(wù),介紹了如何設(shè)置服務(wù)器端口、自定義文件目錄、定制HTTP響應(yīng)頭以及處理GET請求,感興趣的朋友跟隨小編一起看看吧2024-08-08
Python使用execjs執(zhí)行包含中文參數(shù)的JavaScript
爬蟲的開發(fā)過程中,往往需要對JS進(jìn)行模擬,簡單或者通用的還可以在Python中模擬或者找到對應(yīng)的第三方庫,但是復(fù)雜的就可能不好實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于Python使用execjs執(zhí)行包含中文參數(shù)的JavaScript的相關(guān)資料,需要的朋友可以參考下2022-03-03
Python基于ImageAI實(shí)現(xiàn)圖像識別詳解
ImageAI是一個(gè)面向計(jì)算機(jī)視覺編程的Python庫,支持最先進(jìn)的機(jī)器學(xué)習(xí)算法。本文將利用ImageAI實(shí)現(xiàn)圖像識別功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-02-02
Python實(shí)現(xiàn)計(jì)算機(jī)時(shí)長管理程序
這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫一個(gè)包含倒計(jì)時(shí),密碼驗(yàn)證,音頻控制,系統(tǒng)進(jìn)程監(jiān)控與終止等功能的程序,需要的可以了解下2025-02-02
用selenium解決滑塊驗(yàn)證碼的實(shí)現(xiàn)步驟
驗(yàn)證碼作為一種自然人的機(jī)器人的判別工具,被廣泛的用于各種防止程序做自動化的場景中,下面這篇文章主要給大家介紹了關(guān)于用selenium解決滑塊驗(yàn)證碼的實(shí)現(xiàn)步驟,需要的朋友可以參考下2023-02-02
Python使用Scapy實(shí)現(xiàn)構(gòu)造特殊數(shù)據(jù)包
Scapy是一款Python庫,可用于構(gòu)建、發(fā)送、接收和解析網(wǎng)絡(luò)數(shù)據(jù)包,這篇文章主要為大家詳細(xì)介紹了python如何使用Scapy構(gòu)造特殊數(shù)據(jù)包,有需要的可以參考下2023-11-11

