我想捕獲SIGINT(CTRL + C)。 我希望當用戶鍵入CTRL + C它會殺死子進程,但父進程將正常繼續。 當我在我的程序中有子進程時它工作正常,但是當我沒有子進程時,我得到「分段錯誤」。分段故障信號處理程序sigint
我已經這樣做了:
void sig_handler(int signo);
//========================================
int main()
{
// CTRL + C => SIGINT handler
struct sigaction act;
act.sa_handler = sig_handler;
sigfillset(&act.sa_mask);
act.sa_flags = 0;
// Catch the signal
sigaction(SIGINT, &act, NULL);
...
// done some checks and then fork a child.
}
// SIGINT handler
void sig_handler(int signo)
{
// dont know what to write here
}
分叉你的子進程之前獲取當前的進程ID,然後把它分叉你的孩子並獲得它的進程ID,然後當處理信號時檢查ctrl c是否爲父進程ID,然後根據它實現你的邏輯。 – FZE
你在哪行代碼中得到了分段錯誤? –