6

这是我上一个问题的续集。我正在使用 fork 创建子进程。在孩子内部,我正在命令运行如下进程:

if((childpid=fork())==0)
{
system("./runBinary ");
exit(1)
}

我的 runBinary 具有测量从开始到结束需要多少时间的功能。

令我惊讶的是,当我直接在命令行上运行 runBinary 时,大约需要 60 秒。但是,当我将它作为子进程运行时,它需要更多,比如 ~75 或更多。有什么我可以做或目前做错的事情,这会导致这种情况吗?

我在这里先向您的帮助表示感谢。更多细节:我在 linux RHEL 服务器上运行,有 24 个内核。我正在测量 CPU 时间。一次,我只 fork 8 个孩子(按顺序),每个孩子都绑定到不同的核心,使用任务集(代码中未显示)。除了我自己的程序,系统没有加载。

4

2 回答 2

2

system() 函数用于调用 shell。您可以在其中执行任何操作,包括运行脚本。这为您提供了很大的灵活性,但也有代价:您正在加载一个 shell,然后在其中运行二进制文件。虽然我不认为加载 shell 会造成这么大的时间差异(毕竟 15 秒很多),因为看起来你不需要那个 - 只是为了运行应用程序 - 尝试使用exec中的一些东西()家庭代替。

于 2012-04-12T16:21:32.120 回答
0

如果不分析应用程序,如果派生的父进程具有较大的内存空间,您可能会发现尝试派生进程本身并尝试复制内存空间会花费时间。

这在 Red Hat Enterprise Linux 6 中不是问题,但在 Red Hat Enterprise Linux 5 的早期版本中存在。

于 2012-09-18T03:23:39.067 回答