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. 然而,在这个例子中它没有做任何事情。有没有人有关于如何使用它的想法?
我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 kill或command kill而不是来明确说明要运行的那个kill。您还可以通过指定路径来运行外部命令:/bin/kill.
要停止所有进程并注销,请输入:
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) 中的所有内容。