2012-02-02 57 views
0

是否有可能殺死由System創建的進程?迄今爲止,據我所知,System使用fork()函數來創建一個新的進程。我想跟蹤調用的進程的運行時間(在調用系統之前將其分開),如果超出運行時間限制,則將其終止。如果殺死我的主流程創建的孩子,系統()創建的孩子是否也會被殺死?由系統創建的C++殺死進程&&限制它的執行時間

這不是實際的代碼,但可能會給我一個想法,我在說什麼。

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

我也喜歡,如果我可以使用CPU時間限制,但我不希望我的子進程睡覺。如果確實如此 - 它可能會長時間處於這種狀態。是否有可能中斷任何睡眠,暫停或被程序故意調用的任何東西?這將是理想的。或者,也許我可以檢查我的流程是否正在睡覺(在這種情況下,我還必須確保它是有意做的,並且因爲某些打印或其他原因而沒有暫停)?而不是系統

回答

2
  1. 使用exec
  2. 安排家長到接收SIGARLM信號。收到後使用kill系統調用來殺死孩子。使用alarm功能設置警報。
  3. 讓父母使用wait系統調用等待孩子自然中斷或因接收系統調用而中止。

你可以把它少一點苛刻,但首先第一發送TERM信號,並給孩子一個機會,發送KILL信號之前收拾。