我们最近发现 GNU Kill 超越了规格,将以名称作为参数并尝试终止具有该名称的所有进程,与 pkill(1) 或 Killall 的某些实现相同。
我还没有找到 GNU 的 Kill 变更日志。这个“功能”是什么时候添加的?
答案1
您可以浏览源码萨凡纳上的 Gnu coreutils(或在您的计算机上克隆存储库),特别是查看来源和变更日志的kill
实用程序。没有也从来没有这样的功能。
do {
intmax_t n = (errno = 0, strtoimax (arg, &endp, 10));
…
if (errno == ERANGE || pid != n || arg == endp || *endp)
{
error (0, 0, _("%s: invalid process id"), arg);
status = EXIT_FAILURE;
}
…
} while ((arg = *++argv));
这您链接到的联机帮助页用于kill
来自的命令util-linux 集合。从手册页的日期可以看出,这个功能已经很老了。许多 Linux 系统都提供kill
来自 GNU coreutils 的命令,或者来自过程包,大多数时候你会看到 shell 的内置命令而不是外部命令。这些都不允许您将裸命令名称作为参数传递。
与此相关的是,在 bash、ksh 和 zsh 中,您可以将任何作业规范作为参数传递给kill
.作业规范以 a 开头%
,后面可以跟作业编号或该作业命令名称的一部分。
$ jobs
[3] + Running sleep 9999 &
[2] - Stopped vim foo
[1] Running xterm &
$ kill %sleep
[3] + Terminated sleep 9999 &
$ jobs
[2] + Stopped vim foo
[1] - Running xterm &