![如果 shell 正在运行程序,按下 Ctrl+C 时 shell 是否也会收到 SIGINT 信号?](https://linux22.com/image/111701/%E5%A6%82%E6%9E%9C%20shell%20%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F%EF%BC%8C%E6%8C%89%E4%B8%8B%20Ctrl%2BC%20%E6%97%B6%20shell%20%E6%98%AF%E5%90%A6%E4%B9%9F%E4%BC%9A%E6%94%B6%E5%88%B0%20SIGINT%20%E4%BF%A1%E5%8F%B7%EF%BC%9F.png)
我读过,当您按下 时Ctrl+C
,SIGINT
就会向前台进程组。
现在这里接受的答案问题说:
基本上,您的信号被所有前台进程接收,即 shell 和程序,
我执行了cat
inside bash
,发现PGID
forbash
和cat
是不同的,所以它们不属于同一个进程组。
所以当你按 时Ctrl+C
,只会cat
收到SIGINT
信号(所以我引用的答案是错误的),我对吗?
答案1
这个问题是关于 bash 脚本的。您正在以交互方式运行 bash。这对进程组来说有所不同:这就是发明进程组的全部原因。进程组的目的是捕获一个交互式启动的任务中涉及的所有进程。因此,交互式 shell 在单独的进程组中启动每个作业,而运行脚本的 shell 不会创建新的进程组。