2012-02-02 15 views
0

Systemによって作成されたプロセスを強制終了できますか?私が知る限り、Systemはfork()関数を使用して新しいプロセスを作成します。私は(システムを呼び出す前にそれをforkした)プロセスの実行時間を追跡し、実行時間制限を超えた場合にはそれを強制終了したい。私の主なプロセスによって作成された子供を殺すと、system()によって作成された子も殺されるのでしょうか?システムで作成されたC++の殺害プロセス&&実行時間の制限

これは実際のコードではありませんが、私が何を言っているのかを知ることができます。

int pid = fork(); 
if(pid == 0) 
{ 
    system("./veryLongProgram"); 
} 
else 
{ 
    // calculate time elapsed and kill on long execution time 
} 

私はCPU時間制限を使用することもできますが、子プロセスがスリープ状態にならないようにすることもできます。もしそうなら、非常に長い間このような状態に留まるかもしれません。スリープ、休止、または意図的に呼び出されたプログラムによって呼び出されたものを混在させることは可能ですか?それは理想的だろう。または、私のプロセスが眠っているかどうかを確認することができます(そのような場合には、それが意図的に実行されたことを確認しなければなりません。

答えて

2
  1. 代わりにシステム
  2. の使用execSIGARLM信号を受信するために、親のために配置します。受信時にkillシステムコールを使用して子を強制終了します。 alarm関数を使用してアラームを設定します。
  3. waitシステムコールを使用する親を取得して、子供が自然に死ぬかシステムコールを受信するまで待ってください。

あなたはそれが少し厳しい作るが、最初の最初のTERM信号を送信し、子供にKILL信号を送信する前に整理する機会を与えることができます。

関連する問題