国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中的進程分支fork和exec詳解

2020-02-23 00:40:35
字體:
來源:轉載
供稿:網(wǎng)友

在python中,任務并發(fā)一種方式是通過進程分支來實現(xiàn)的.在linux系統(tǒng)在,通過fork()方法來實現(xiàn)進程分支.

1.fork()調用后會創(chuàng)建一個新的子進程,這個子進程是原父進程的副本.子進程可以獨立父進程外運行.
2.fork()是一個很特殊的方法,一次調用,兩次返回.
3.fork()它會返回2個值,一個值為0,表示在子進程返回;另外一個值為非0,表示在父進程中返回子進程ID.

以下只能在linux中運行,不能在window下運行.

進程分支fork()

實例如下:
代碼如下:
#!/usr/bin/python
#coding=utf-8
import os

def child():
    print('hello from child', os.getpid())
    os._exit(0)
def parent():
    pid = os.fork()
    if pid == 0:
        child()
        print 'fork child process error!'#如果打印該字符串,說明調用child()出錯
    else:
        print('hello from parent', os.getpid(), pid)

parent()

運行結果如下:
代碼如下:
('hello from parent', 29888, 29889)
('hello from child', 29889)

從結果不難看出, child()后的print字符并沒有打印處理,說明調用child()是沒有返回的.

fork和exec的組合

從上面的例子來看,調用child()方法后就直接退出了.但在實際的應用中,我們希望分支出來的子進程能獨立運行另外一個新的程序.這時需要用到exec方法替換子進程,并且替換后進程的pid不會改變.exec方法不會返回.

首先解釋一下exec相關的8個方法組:

os.execv(program, cmdargs)

基本的”v”執(zhí)行形式,需要傳入可執(zhí)行的程序名,以及用來運行程序的命令行參數(shù)字符的列表或元組.

os.execl(program, cmdarg1, cmdarg2, …, cmdargN)

基本的”l”執(zhí)行形式,需要傳入可執(zhí)行的程序名,以及用來運行程序的命令行多個字符參數(shù).

os.execvp(program, args)

“p”模式下,基本的”v”執(zhí)行形式,需要傳入可執(zhí)行的程序名,以及用來運行程序的命令行參數(shù)字符的列表或元組.運行新程序的搜索路徑為當前文件的搜索路徑.

os.execlp(program, cmdarg1, cmdarg2, …, cmdargN)

“p”模式下,基本的”l”執(zhí)行形式,需要傳入可執(zhí)行的程序名,以及用來運行程序的命令行多個字符參數(shù).運行新程序的搜索路徑為當前文件的搜索路徑.

os.execve(program, args, env)

“e”模式下,基本的”v”執(zhí)行形式,需要傳入可執(zhí)行的程序名,以及用來運行程序的命令行參數(shù)字符的列表或元組.最后還要傳入運行新程序的需要的環(huán)境變量env字典參數(shù).

os.execle(program, cmdarg1, cmdarg2, …, cmdargN, env)

“e”模式下,基本的”l”執(zhí)行形式,需要傳入可執(zhí)行的程序名,以及用來運行程序的命令行多個字符參數(shù).最后還要傳入運行新程序的需要的環(huán)境變量env字典參數(shù).

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 三江| 北票市| 云林县| 柞水县| 和田县| 株洲县| 黎城县| 五常市| 武汉市| 竹溪县| 增城市| 徐水县| 浮山县| 万源市| 贵州省| 亚东县| 天气| 福清市| 永昌县| 江陵县| 桃园市| 象州县| 沁阳市| 额济纳旗| 澄江县| 鸡泽县| 兴化市| 太湖县| 通河县| 荣昌县| 寿光市| 和平县| 高尔夫| 陇川县| 阜新| 滕州市| 饶平县| 咸丰县| 通道| 永登县| 芒康县|