簡體   English   中英

python分叉的進程未使用os.execlp執行

[英]python forked processes not executing with os.execlp

我已經有了這個簡單的python腳本,該腳本應該派生新進程,然后讓每個進程都使用os.execlp執行命令,但是執行僅發生一次。 我很好奇是否存在計時問題,這會阻止執行其他分叉:

import os

for n in range(5):
    PID = os.fork()
    if PID == 0: #the child...
        print("This child's PID is: %s" % os.getpid())
        os.execlp('open','-n','-a','Calculator')
        # os.popen('open -n -a Calculator')
        # os._exit(0)
    else:
        print("new child forked: %d" % PID)

為此,OS X中的“ open -n -a Appname”命令將啟動指定應用程序的新實例,因此上面的代碼應將分支的進程替換為“ open”命令,並且該命令應運行5次。 但是,它僅運行一次,因此僅打開了一個Calculator實例。 盡管如此,父母還是列出了5個分叉的孩子PID。

如果我注釋掉os.execlp行並取消注釋其后的os.popen和os._exit行,則此操作正常,子進程全部運行“ open”命令; 但是,我想知道為什么使用execlp(或execvp和其他類似變體)替換分叉進程的方法不起作用? 顯然子進程正在運行,因為我可以使用管道來運行“ open”命令。

這是python 3.4.3。

可執行文件之后的第一個參數是arg [0],按照慣例,它是可執行文件的名稱。 如果您具有確定程序行為的符號鏈接,這將很有用。 在您的情況下,您將程序命名為'-n' ,而實際參數僅為-aCalculator 所以你必須重復'open'

os.execlp('open', 'open', '-n', '-a', 'Calculator')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM