2013-10-02 43 views
0

我正在編寫一個shell,現在它來控制子進程。 當我在子進程使用signal (SIGTERM, SIG_DFL);,通過按Ctrl + C產生關於子進程中的SIGINT

信號SIGINT,並且該信號終止整個操作系統殼。

我該如何終止例如「貓」的過程而不是整個殼? 我應該使用像出頭:

void sig_handler(int sig) { 
if(sig ==SIGINT) 
{ 
kill(pid); 
} 
} 

真的感謝插槽。

+0

你試過了嗎?結果是什麼? – alk

+0

我想孩子的過程會變成殭屍。 –

回答

0

你的問題相當模糊。你能更清楚你想達到什麼目的嗎? 我想你應該使用signal(SIGTERM,sig_handler)而不是SIG_DFL,這是採取的默認操作。因爲,你有一個信號處理程序,你可以調用它,而不是像SIG_INT或SIG_DFL這樣的預定義函數。你的函數裏面的代碼看起來很好。只要你知道pid,你就可以殺死(pid)。

0

在exec'd孩子中,如果將SIGINT(和SIGQUIT)處理程序設置爲父shell中的處理程序,則SIGINT(和SIGQUIT)處理程序將是SIG_DFL,而這很可能是正確的。 (當然,你不能在一個exec上繼承一個非默認的信號處理程序,因爲exec'd過程中通常不存在該函數。)

設置SIGTERM的處理程序不會影響對信號情報的反應,反之亦然。

你的外殼不應該需要傳遞信號給它的孩子。