使用C++对多个system()命令进行排队

Queue multiple system() commands using C++

本文关键字:命令 排队 system C++ 使用      更新时间:2023-10-16

我有一个程序,每次需要使用我的10个处理器执行100次不同的参数。

所以基本上我想做多个系统调用,以便完成我的列表。然而,如果我只是把system()放在for循环中,它将只使用一个处理器,并且会一个接一个地运行。我如何打开多个终端,这些终端可以同时运行不同的程序,并在结束时报告它们已完成,使我能够从池中为特定处理器分配新任务?

提前感谢

您应该了解forkexecwait系统调用。

原则上,您为每个子流程进行fork/exec组合,并记录其PID。当所有进程都在运行时,请使用wait或变体来等待完成。然后,您可以处理返回值,启动另一个进程等。

我建议您改用popen()。system()不是一个好的选择。您可以打开任意数量的流(在合理的范围内),并独立地与每个进程进行通信。popen()包装fork+pipe+exec,进程将由操作系统调度,与父进程无关。

或者考虑使用fork/exec实现您自己的。您可以使用waitpid等来检查单个PID的状态,以了解它们的退出代码,尽管我喜欢使用popen(),通过解析程序的文本返回消息来获得更丰富的反馈。