linux kill命令终止子进程吗?

时间:2010-02-17 04:21:23

标签: linux

当您在父进程上调用“kill”时,子进程是否也会被杀死?

4 个答案:

答案 0 :(得分:6)

不,不是自动的。

通常,当父母被杀时,孩子将被发送HUP信号。当父是shell时,至少会这样。我不确定每当孩子被fork()编辑时这是免费的。

但是这可能会失败,例如,如果父级是shell并且孩子是使用nohup child&开始的,或者孩子本身声明它会忽略HUP信号。

答案 1 :(得分:3)

man 2 kill

int kill(pid_t pid, int sig);
     

如果 pid 大于0, sig 将被发送到进程ID等于 pid 的进程。

     

如果 pid 为负数,但不为-1,则应将 sig 发送给进程组ID等于的所有进程(不包括未指定的系统进程集) pid 的绝对值,并且该进程有权发送信号。

除非调用setpgid或类似函数,否则子进程与其父进程位于同一进程组中。例如,shell启动的作业属于与shell本身相同的进程组。

因此kill -HUP $$SIGHUP发送到您的shell,而kill -HUP -$$SIGHUP发送给您当前会话中的所有进程,包括您的shell的子进程。

答案 2 :(得分:0)

这个bash脚本将自杀和子进程...与nohup相反。

#!/bin/bash

read pid cmd state ppid pgrp session tty_nr tpgid rest < /proc/self/stat
trap "kill -TERM -$pgrp; exit" EXIT TERM KILL SIGKILL

# run the program given on args
"$@"

exit $?

有没有人知道是否有像这样的内置?

答案 3 :(得分:-1)

是的,它会;使用kill -1http://unixhelp.ed.ac.uk/shell/jobz5.html