2011-07-20 7 views
2

私はexec()関数の1つで子プロセスを要求する必要がある場合、子プロセスを生成する必要があります。killとwaitpidを使って刈り取る能力の間の予想時間

子プロセスが終了する前に終了していない場合、アプリケーションは新しいインスタンスを開始する前に前のインスタンスを強制終了する必要があります。それは私が前のインスタンスのPIDを維持し、プロセスを享受するために

waitpid(pid, &status, WNOHANG) 

を使用してい

kill(pid, SIGTERM); 

でこれを行います。

killコールを発行してからwaitpidでプロセスを取得できるまでに非常に長い時間ウィンドウ(おそらく数百ミリ秒)があるようです。

この原因は何ですか?私は、子プロセスがシグナルハンドラを設定しない限り(これはそうではありません)、事実上すぐに殺されると考えました。これは200MHzのARM9上ですが、まだ...私には奇妙に思えます。

+0

アプリケーションを強制終了する代わりに、メッセージを送信して自己管理を終了すると、時間を節約することができます。 – avra

答えて

3

シャットダウンする前に独自のクリーンアップを実行するために、プロセスはSIGTERMをキャッチする可能性があります。

たとえそうでないとしても、OSがプロセスをシャットダウンするのにどれくらいの時間がかかります。

このようなことに頼りにしようとするのは、馬鹿なことです。

+0

お返事ありがとうございました。私はタイミングそのものに頼っているわけではありませんが、これは死ぬ間の競争条件の何かを明らかにしました。子プロセスはSIGTERMを明示的にキャッチしていませんが、ライブラリ関数によってはそれがダウンしている可能性があります。 –

関連する問題