- 论坛徽章:
- 0
|
关于tty终端的书中,有这样一种说法:
一个进程始终属于一个process group,而多个process group都属于一个session
一个tty终端可能会和一个session相关联,而session中的某个process group在当前是一个foreground group,
也就是说在终端上按ctrl + c ,就会发信号到这个终端的前台进程组中的所有进程:
当 ctrl+C 按下,
n_tty.c: n_tty_receive_break() –> isig(SIGINT,tty) –> kill_pg(SIGINT, tty->pgrp)
我做了一个测试,在进程A中用system()函数运行一个系统命令,如"ping 127.0.0.1",然后用ps ja 看当前的进程:
"ping 127.0.0.1"的结果就是产生了一个进程B,并且是A的子进程。
此时A和B有着相同的进程组ID,相同的session ID,那么在终端上按ctrl +c ,会发送SIGINT到A和B两个进程
但是当我按ctrl + c 的时候,那个一直运行的ping命令被关掉了,但是进程A却还活着,也就是说他没有收到SIGINT信号!
为什么A和B有着共同的进程组ID,却是B能收到SIGINT,而A收不到呢? |
|