我有一个程序,我需要每次使用不同的参数执行100次,使用我的10个处理器。
所以基本上我想做多个系统调用,以完成我的列表。但是,如果我只是将system()放在for循环中,它将只使用一个处理器,它将逐个进行。 如何打开多个终端,可以同时运行不同的程序,最后报告它们已完成,使我能够从池中为该特定处理器分配新任务?
提前谢谢
答案 0 :(得分:3)
您应该阅读有关fork
,exec
和wait
系统调用的信息。
原则上,您为每个子进程执行fork
/ exec
组合并记录其PID。当您想要运行所有进程时,请使用wait
或变量等待完成。然后,您可以处理返回值,启动另一个进程等。
答案 1 :(得分:1)
我建议您改用popen()
。 system()不是一个好的选择。您可以根据需要打开任意数量的流(在合理范围内)并独立地与每个流程进行通信。 popen()包装fork + pipe + exec,操作系统将调度进程,与父进程无关。
或者考虑使用fork / exec实现自己的。您可以使用waitpid等来检查单个PID的状态以了解它们的退出代码,尽管我喜欢通过解析程序中的文本返回消息来使用popen()并提供更丰富的反馈。