gpt4 book ai didi

c++ - 告诉 execl() 进程何时退出

转载 作者:行者123 更新时间:2023-11-30 01:32:50 24 4
gpt4 key购买 nike

我有一个 c++ 应用程序,队列中有某些项目,然后这些项目将由 python 脚本处理。我想要它,以便最多运行 10 个 python 脚本实例。我计划使用 execl() 来启动 python 进程,有没有办法告诉进程已经退出而不必将消息传递回父进程?

最佳答案

execl 不启动进程——它用另一个可执行文件覆盖现有进程。 fork 确实启动一个进程——并将子进程的 id(又名 pid)返回给父进程(返回 0 给子进程,这就是 child 如何知道它是 child ,所以它可以清理东西并 exec)。使用 child 的 pid 检查他们是否完成,或者陷阱 SIGCHLD跟踪这一点。

我推荐 SIGCHLD 这样您就不必“轮询”以查看某个进程是否已终止,但后一种方法也不太难——只需偶尔执行一次:

def whosdone(pids):
nope = []
done = []
for pid in pids:
try: os.kill(pid, 0)
except OSError: nope.append(pid)
else: done.append(pid)
return done, nope

即您可以定期调用 done, pidslist = whosdone(pidslist) 并对已完成的 PID 做任何您需要做的事情。当然,当你fork时,使用成语:

pid = os.fork()
if pid: # we're the parent process
pidslist.append(pid)
else: # we're the child process
# clean things up, etc, then exec

关于c++ - 告诉 execl() 进程何时退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/991616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com