【发布时间】:2016-03-26 23:32:30
【问题描述】:
我正在尝试捕捉 SIGINT (CTRL + C)。 我希望当用户键入 CTRL + C 时,它会杀死子进程,但父进程将正常继续。 当我的程序中有子进程时它工作正常,但是当我没有子进程时,我得到“分段错误”。
我已经这样做了:
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
}
【问题讨论】:
-
在 fork 你的子进程之前获取当前进程 ID,然后 fork 你的子进程并获取它的进程 ID 然后在处理信号时检查 ctrl c 是否用于父进程 ID 然后实现你的根据它的逻辑。
-
在哪一行代码中出现分段错误?