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

时间:2014-10-22 06:33:28

标签: c++ linux unix fork system

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

所以基本上我想做多个系统调用,以完成我的列表。但是,如果我只是将system()放在for循环中,它将只使用一个处理器,它将逐个进行。 如何打开多个终端,可以同时运行不同的程序,最后报告它们已完成,使我能够从池中为该特定处理器分配新任务?

提前谢谢

2 个答案:

答案 0 :(得分:3)

您应该阅读有关forkexecwait系统调用的信息。

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

答案 1 :(得分:1)

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

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