父进程如何忽略 SIGINT 而子进程不能?



当我在终端(SIGINT)运行'control c'时。我希望父进程忽略它,但不希望他的子进程(由fork()和execvp()创建)。

我添加了

signal(SIGINT, SIG_IGN);

的父进程忽略SIGINT,但现在他的子进程也忽略它。

你必须添加

signal(SIGINT, SIG_IGN);

在fork()之后,以便区分父进程和子进程的行为。

否则子节点将继承父节点的行为。

Alez的回答将起作用,但这里有另一种方法:在子进程中,在调用execvp之前,运行signal(SIGINT, SIG_DFL);。如果你在开始忽略它之后需要生成更多的子进程,这种方式将会很有帮助。

最新更新