kill 0 实际上是做什么的?

Fir*_*gun 10 linux unix shell kill process

man page,它说:

          0      All processes in the current process group are signaled
Run Code Online (Sandbox Code Playgroud)

我试过这样:

$ man kill &
[1] 15247
$
[1]+  Stopped                 man kill
$ kill 0
$ ps
15247 pts/41   00:00:00 man
Run Code Online (Sandbox Code Playgroud)

据我了解,kill 0将杀死当前进程中的所有进程,其中包括pid15247. 然而,在这个例子中它没有做任何事情。有没有人有关于如何使用它的想法?

mpy*_*mpy 5

kill 0在我的 kill 手册页 (debian) 中找不到有关行为的说明。

但我有两点意见:

(1) “进程组”可能不是您所期望的。您可以使用以下命令显示进程组 ID (PGID) ps -o "%p %P %r %c %a"

$ ps -o "%p %P %r %c %a"
  PID  PPID  PGID COMMAND         COMMAND
12124 12123 12124 zsh             -zsh
12212 12124 12212 man             man kill
12226 12212 12212 less            less
12302 12124 12302 ps              ps -o %p %P %r %c %a
Run Code Online (Sandbox Code Playgroud)

因此,man与显示分页工具 ( less) 一起位于同一进程组中,但这与 shell 的进程组不同(在我的情况下为 zsh)。

(2) 可能有两个不同的kill命令。一个内置于bash(参见 bash(1), Section "SHELL BUILTIN COMMANDS")和外部/bin/kill. 这两个可能表现不同!您可以通过键入builtin killcommand kill而不是来明确说明要运行的那个kill。您还可以通过指定路径来运行外部命令:/bin/kill.

  • `PPID` 是 *parent* 进程 ID,通常但不一定是进程组 ID。正确的列是“PGID”,它不会出现在默认的“ps”输出中;您需要使用 `-o` 选项来构建包含它的自定义格式。 (3认同)

Dan*_*lia 2

要停止所有进程并注销,请输入:

kill -kill 0
Run Code Online (Sandbox Code Playgroud)

这会将信号 9(SIGKILL 信号)发送到进程组 ID 等于发送者进程组 ID 的所有进程。由于 shell 无法忽略 SIGKILL 信号,因此这也会停止登录 shell 并让您注销

这是 IBM 的 AIX 手册,但也许这个概念适用。

Linux“kill”中不存在此功能(正如我所见);但这就是它的“杀死”行为:

Killing 0并不是杀死pid 0。而是kill中的一个选项,用于杀死当前组中的所有进程。使用您的命令,您将杀死发出kill 命令的shell 的进程组ID (GID) 中的所有内容。