您的问题会自行回答,这是因为这些进程在终端模拟器下作为子进程运行。因此,您要终止终端仿真器,并这样做,请终止所有子进程(因为子进程与控制终端仿真器在同一进程组下运行)。
例如,请参见以下内容:
csb@darwin[~]$ ps fauwx | grep -A6 "xfce4-terminal" | awk '{ for (i = 2; i <= 9; i++) $i="" ; print $0 }'
csb 0:32 xfce4-terminal --geometry=271x65 --display :0.0 --role=Terminal-0x1340050-2606-1351620352 --show-menubar --show-borders --hide-toolbars --working-directory /home/csb --tab --working-directory /home/csb
csb 0:00 \_ gnome-pty-helper
csb 0:00 \_ bash
csb 0:00 |
\_ ssh [redacted]
csb 0:00 \_ bash
csb 0:00 \_ ps fauwx
csb 0:00 \_ grep --color=auto -A6 xfce4-terminal
csb 0:00 \_ awk { for (i = 2; i <= 9; i++) $i="" ; print $0 }
所有这些进程都在“ xfce4-terminal”进程下运行,因此,如果我终止该进程,它将自动终止进程组中的所有子进程……例如,退出终端仿真器窗口的方式相同一定会杀死我的SSH连接。
诸如shell之类的程序会创建新的进程组,通常将相关的子进程放入组中。每个作业都是一个流程组。在内核外部,shell通过使用killpg系统调用将信号发送到作业的进程组来操纵作业,该信号将信号发送到进程组中的所有进程。