自己隨手寫了Python下 fork 進(jìn)程的測試代碼(來說明這個問題不一定完全合適):
def fork(a):
def now():
import datetime
return datetime.datetime.now().strftime("%S.%f")
import os
import time
print now(), a
if os.fork() == 0:
print '子進(jìn)程[%s]:%s' % (now(), os.getpid())
while 1:
a-=10
print '子進(jìn)程的a值[%s]:%s' % (now(), a)
if a < 1:
break
print '準(zhǔn)備退出子進(jìn)程'
#os._exit(0) ## 你可以在這里退出子進(jìn)程
else:
print '父進(jìn)程[%s]:%s' % (now(), os.getpid())
while 1:
a-=1
print '父進(jìn)程的a值[%s]:%s' % (now(), a)
if a < 0:
break
time.sleep(1)
print '等待子進(jìn)程結(jié)束...'
try:
result = os.wait()
if result:
print '子進(jìn)程:', result[0], result[1]
else:
print '沒有數(shù)據(jù)!'
except:
print '異常哦...'
print '父進(jìn)程...'
print '最后的值:',a
#exit(0) ## 你也可以在這里退出,注意,這里是父進(jìn)程和子進(jìn)程都共用的地方,在這里退出會導(dǎo)致父進(jìn)程也一并退出
TIPS:
os.fork() 會有兩次返回值,分別是父進(jìn)程和子進(jìn)程的返回值
在父進(jìn)程中,fork返回的值是子進(jìn)程的PID;
子進(jìn)程中,這個返回值為0
子進(jìn)程會復(fù)制父進(jìn)程的上下文
父子進(jìn)程并不能確定執(zhí)行順序
os.fork() 之后,子進(jìn)程一定要使用 exit() 或者 os._exit() 來退出子進(jìn)程環(huán)境,建議使用 os._exit()
os.fork() 來創(chuàng)建子進(jìn)程的這個代碼并不是很通適,Linux是沒問題的,在Windows下就是不能用的,而官方文檔也有類似表述:
Note that some platforms including FreeBSD <= 6.3, Cygwin and OS/2 EMX have known issues when using fork() from a thread
Availability: Unix.
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

