6

これは私の前の質問の続編です。フォークを使用して子プロセスを作成しています。child 内で、次のようにプロセスを実行するコマンドを与えています。

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

私の runBinary には、開始から終了までの時間を測定する機能があります。

驚いたことに、コマンドラインで runBinary を直接実行すると、約 60 秒かかります。ただし、子プロセスとして実行すると、〜75以上かかります。これにつながる、私ができること、または現在間違っていることはありますか?

事前に助けてくれてありがとう。詳細: 24 コアの Linux RHEL サーバーで実行しています。CPU時間を測定しています。一度に 8 つの子のみを (順次) フォークし、それぞれがタスクセット (コードには表示されていません) を使用して異なるコアにバインドされます。システムは自分のプログラム以外はロードされていません。

4

2 に答える 2

2

system() 関数は、シェルを呼び出すためのものです。スクリプトの実行など、その中で何でもできます。これにより多くの柔軟性が得られますが、代償が伴います。シェルをロードしてから、その中で Binary を実行します。シェルのロードがそれほど大きな時間差の原因になるとは思いませんが(結局のところ、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 に答える