终端仿真器在收到SIGKILL后如何杀死他们的孩子?


12

据我了解,SIGKILL不能被抓住。这意味着一个进程没有时间在操作系统销毁它之前杀死它的孩子。这可以通过shell脚本来演示。

#! /bin/bash

trap : SIGTERM SIGINT SIGKILL # SIGKILL is pointless.

mplayer video.avi

使用SIGKILL杀死它会使mplayer运行。

$ kill -9 $pid

但是,当使用终端仿真器(xterm,Terminal,...)时,子进程会被杀死。这怎么可能?

$ mplayer

并杀死它:

$ kill -9 $terminal_pid

而mplayer随船而去。终端仿真器是否以某种方式赶上了SIGKILL,或者这里还有其他力量在起作用?

Answers:


11

开始的过程xterm将是会话控制终端的领导者。

当终端消失时,该过程将自动接收SIGHUP信号(随后是SIGCONT)。这是由内核发送的,类似于当您按CTRL-C时进程接收SIGINT。

此外,shell可能会在退出时将SIGHUP发送给其某些子级(请参阅disown某些shell来禁用它)


1
有关会议和会议负责人的信息,请访问:unix.stackexchange.com/questions/18166/…
凯文·考克斯

+1 disown这是非常有用的。
2013年

1

您的问题会自行回答,这是因为这些进程在终端模拟器下作为子进程运行。因此,您要终止终端仿真器,并这样做,请终止所有子进程(因为子进程与控制终端仿真器在同一进程组下运行)。

例如,请参见以下内容:

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系统调用将信号发送到作业的进程组来操纵作业,该信号将信号发送到进程组中的所有进程。


3
-1:杀害父母确实没有原因被杀害的孩子们。
camh 2012年

2
诸如shell之类的程序会创建新的进程组,通常将相关的子进程放入组中。每个作业都是一个流程组。在内核外部,shell通过使用killpg系统调用将信号发送到作业的进程组来操纵作业,该信号将信号发送到进程组中的所有进程。
Charles Boyd 2012年

2
@CharlesBoyd该评论应成为您答案的一部分。
jordanm 2012年

4
@CharlesBoyd:将其添加到您的答案中,我会给您+1而不是-1。您的答案当前显示为杀死父进程时子进程被杀死(BTW,它是基于会话的,而不是基于进程组的)。
camh 2012年

@CharlesBoyd我理解这一点,但问题的关键是当它收到SIGKILL时如何“通过发送信号来操纵[]作业”。我认为当时无法使用killpg系统调用。
凯文·考克斯

0

首先,我无法使用来复制在终端被杀之后的mplayer xterm

它之所以死是因为它从父母的去世中得到了SIGHUP。


我从没说过这么做,我说过它死了,但是当它在剧本中被杀死时可以幸存下来。
凯文·考克斯

对我而言,无法在脚本中生存。
风滚草
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.