我正在編寫一個shell,現在它來控制子進程。 當我在子進程使用signal (SIGTERM, SIG_DFL);
,通過按Ctrl + C產生關於子進程中的SIGINT
信號SIGINT,並且該信號終止整個操作系統殼。
我該如何終止例如「貓」的過程而不是整個殼? 我應該使用像出頭:
void sig_handler(int sig) {
if(sig ==SIGINT)
{
kill(pid);
}
}
真的感謝插槽。
我正在編寫一個shell,現在它來控制子進程。 當我在子進程使用signal (SIGTERM, SIG_DFL);
,通過按Ctrl + C產生關於子進程中的SIGINT
信號SIGINT,並且該信號終止整個操作系統殼。
我該如何終止例如「貓」的過程而不是整個殼? 我應該使用像出頭:
void sig_handler(int sig) {
if(sig ==SIGINT)
{
kill(pid);
}
}
真的感謝插槽。
你的問題相當模糊。你能更清楚你想達到什麼目的嗎? 我想你應該使用signal(SIGTERM,sig_handler)而不是SIG_DFL,這是採取的默認操作。因爲,你有一個信號處理程序,你可以調用它,而不是像SIG_INT或SIG_DFL這樣的預定義函數。你的函數裏面的代碼看起來很好。只要你知道pid,你就可以殺死(pid)。
在exec'd孩子中,如果將SIGINT(和SIGQUIT)處理程序設置爲父shell中的處理程序,則SIGINT(和SIGQUIT)處理程序將是SIG_DFL,而這很可能是正確的。 (當然,你不能在一個exec上繼承一個非默認的信號處理程序,因爲exec'd過程中通常不存在該函數。)
設置SIGTERM的處理程序不會影響對信號情報的反應,反之亦然。
你的外殼不應該需要傳遞信號給它的孩子。
你試過了嗎?結果是什麼? – alk
我想孩子的過程會變成殭屍。 –