如下所示:
import os import sys import time processNmae = 'parent' print "Program executing ntpid:%d,processNmae:%s"%(os.gitpid(),processNmae) #attempt to fork child process try: forkPid = os.fork() except OSError: sys.exit("Unable to create new process.") # Am I parent process? if forkPid != 0: print "Parent executingn"+"tpid:%d,forkPid:%d,processNmae:%s"%(os.getpid(), forkPID,processName) # Am I child process? elif forkPID == 0: processName = "child" print "Child executingn" + "tpid: %d, forkPID: %d, processName: %s" % (os.getpid(), forkPID,processName)
print "Process finishingntpid: %d, processName: %s" % (os.getpid(), processName)
程序每次執(zhí)行時(shí),操作系統(tǒng)就會(huì)創(chuàng)建一個(gè)新的進(jìn)程來(lái)運(yùn)行程序指令。進(jìn)程還可以調(diào)用os.fork,要求操作系統(tǒng)新建一個(gè)進(jìn)程。
“父進(jìn)程”是調(diào)用os.fork的進(jìn)程。父進(jìn)程所創(chuàng)建的任何進(jìn)程都是子進(jìn)程。
每個(gè)進(jìn)程都有一個(gè)不重復(fù)的“進(jìn)程ID號(hào)”,或稱“pid”,它對(duì)進(jìn)程進(jìn)程進(jìn)行標(biāo)識(shí)。
進(jìn)程調(diào)用fork函數(shù)時(shí),操作系統(tǒng)會(huì)新建一個(gè)子進(jìn)程,它本質(zhì)上與父進(jìn)程完全相同。子
進(jìn)程從父進(jìn)程繼承了多個(gè)值的拷貝,比如全局變量和環(huán)境變量。兩個(gè)進(jìn)程唯一的區(qū)別就是fork的返回值。
child(子)進(jìn)程接收返回值為0,而父進(jìn)程接收子進(jìn)程的pid作為返回值。調(diào)用fork函數(shù)后,兩個(gè)進(jìn)程并發(fā)執(zhí)行同一個(gè)程序,
首先執(zhí)行的是調(diào)用了fork之后的下一行代碼。父進(jìn)程和子進(jìn)程既并發(fā)執(zhí)行,又相互獨(dú)立;也就是說(shuō),它們是“異步執(zhí)行”的。
import os pid=os.fork() #fork反復(fù)拷貝 if pid==0: print("A",os.getpid(),os.getppid()) else: print("B",os.getpid(),os.getppid()) # os.getpid()獲取當(dāng)前進(jìn)程id os.getppid()獲取父進(jìn)程id
以上這篇對(duì)python中的os.getpid()和os.fork()函數(shù)詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
