所以,一旦调用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不止一次工作吗?