这是我之前question的续集。我正在使用fork来创建子进程。在孩子里面,我命令运行一个过程,如下所示:
if((childpid=fork())==0)
{
system("./runBinary ");
exit(1)
}
我的runBinary具有测量从开始到结束所需时间的功能。
令我惊讶的是,当我在命令行上直接运行runBinary时,需要大约60秒。但是,当我将它作为子进程运行时,需要更多,例如~75或更多。有什么我可以做或者目前做错了,这导致了这个?
提前感谢您的帮助。 更多细节:我在Linux RHEL服务器上运行,有24个核心。我在测量CPU时间。一次,我只使用taskset(代码中未显示)将8个子节点(顺序)分叉,每个子节点绑定到不同的核心。除了我自己的程序外,系统没有加载。
答案 0 :(得分:2)
system()函数用于调用shell。您可以在其中执行任何操作,包括运行脚本。这给了你很大的灵活性,但它有一个代价:你正在加载一个shell,然后在其中运行runBinary。虽然我不认为加载shell会对这么多的时间差异负责(毕竟15秒很多),因为它似乎不需要 - 只是为了运行应用程序 - 尝试使用来自{的东西{3}}家庭代替。
答案 1 :(得分:0)
如果没有对应用程序进行概要分析,如果父进程的分支具有大的内存空间,您可能会发现尝试分解进程本身所花费的时间,并尝试复制内存空间。
这不是Red Hat Enterprise Linux 6中的问题,而是在早期版本的Red Hat Enterprise Linux 5中。