ctrl+c 会向 Linux 中的父进程和子进程发送 SIGINT 信号吗?

Hao*_*hen 9 linux fork signals

在终端中,我执行了一个主要的父进程,它将派生一个子进程。在父进程和子进程中,我都实现了一个 SIGINT 信号处理程序。那么当我按下“ctrl+c”时,两个处理程序会同时被调用吗?或者我是否需要在父进程的处理程序中显式调用子进程的信号处理程序?

我查了一下这篇文章: Ctrl-C 如何终止子进程? 其中说“ SIGINT 信号由终端线路规程生成,并广播给终端前台进程组中的所有进程”。我只是不太明白“前台进程组”是什么意思。

谢谢,

P.P*_*.P. 10

在父进程和子进程中,我都实现了一个 SIGINT 信号处理程序。那么当我按下“ctrl+c”时,两个处理程序会同时被调用吗?

是的,他们都会收到SIGINT

或者我是否需要在父进程的处理程序中显式调用子进程的信号处理程序?

“调用”另一个进程的信号处理程序没有意义。如果两个进程都安装了处理程序,那么它们将在收到信号后被调用SIGINT

我只是不太明白“前台进程组”是什么意思。

通常,与控制终端关联的进程是前台进程,其进程组称为前台进程组。当你从命令行启动一个进程时,它是一个前台进程:

例如

$ ./script.sh # foreground process
$ ./script & # background process
Run Code Online (Sandbox Code Playgroud)

我建议您阅读有关ttyThe TTY demystified获得详细说明。