Signal()只能用CTRL-C工作一次?

时间:2017-05-25 21:56:25

标签: c

所以,一旦调用control-C,我试图让程序杀死子进程。我试图用我的代码的这一部分用control-c来做。:

void signalHandler(int sig_num)
{
    kill(pidKillTracker, SIGINT);
    //signal(SIGINT, signalHandler);
    printf("\nChild PID is terminated: %d\n", pidKillTracker);
    fflush(stdout);
}

int main(int argc, char ** argv)
{
    signal(SIGINT, signalHandler);
//...... 

以下是我展示的输出:

:sleep 20
28345^C
Child PID is terminated: 28345
:sleep 20
28383^C^C^C^C^C:

^ C之前的数字是我打印出子进程ID的地方(我之后是fflush,所以不是那样)。我这样做是为了证明信号正确地杀死了孩子ID。

正如您所看到的,当我第一次调用CTRL-C时,它可以正常工作并终止并打印子进程终止。

是的,我第二次这样做,无论我按CTRL-C多少次,这个过程都不​​会终止。

我无法发现此代码有任何问题。此外,我确保pidKillTracker每次都在父前景中设置为当前子进程,就在waitpid()之前。它被设置为等于fork()的内容并且是子进程。所以它应该每次都调用当前的子进程ID号。

关于为什么第二次不能工作的任何想法?

我已经读过,可能会建议我使用sigaction,但我真的不清楚如何使用它与我正在做的事情,甚至在阅读之后都不熟悉它。我不明白如何使用它。

有人能指出我正确的方向让CTRL-C不止一次工作吗?

0 个答案:

没有答案