Kill

GNU kill(1) 接受名稱參數多久了?

  • November 28, 2011

我們最近發現 GNU kill 超越了spec將使用名稱作為參數並嘗試殺死所有具有該名稱的程序,這與 pkill(1) 或 killall 的某些實現相同。

我一直無法找到 GNU 的更新日誌。這個“功能”是什麼時候添加的?

您可以在 Savannah 上瀏覽 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));

您連結到的聯機幫助頁是util-linux 集合中的kill命令。從手冊頁的日期可以看出,這個特性已經很老了。許多 Linux 系統從 GNU coreutils 或procps包中提供命令,大多數時候你會看到你的 shell 的內置命令,而不是外部命令。這些都不允許您將裸命令名作為參數傳遞。kill

在相關說明中,在 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 &

引用自:https://unix.stackexchange.com/questions/25583