[英]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'
,而实际参数仅为-a
和Calculator
。 所以你必须重复'open'
:
os.execlp('open', 'open', '-n', '-a', 'Calculator')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.