`kill -p` 真的有效吗?

use*_*312 11 shell man kill documentation

在它的手册页中kill是这样写的

概要

  kill [ -s signal | -p ] [ -a ] [ -- ] pid ...
  kill -l [ signal ]

  -p     Specify  that kill should only print the process id (pid) of the
          named processes, and not send any signals.
Run Code Online (Sandbox Code Playgroud)

但是由于我在 RH 和 RHEL 中都尝试了很多次,像这样的命令kill -s SIGHUP |-p 123从未奏效并且总是报告错误

bash: -p: 命令未找到

我犯了什么错误吗?

Mat*_*Mat 51

kill [ -s signal | -p ]
Run Code Online (Sandbox Code Playgroud)

手册页中的这种语法意味着:

您可以使用kill -s signal 可以使用kill -p,但不能同时使用-s,并-p在同一时间。

管道 ( |) 代表(独占)或在文档中,它不是命令的一部分。

当你输入

foo | bar
Run Code Online (Sandbox Code Playgroud)

在您的 shell 中,它将尝试启动foobar,并将 的输出通过管道foo传输到bar程序。(这是 shell 执行此操作,而不是foo(或bar),|未传递给任一进程。)在您的情况下,第二部分是-p 123,因此 shell 尝试查找调用的可执行文件-p并失败并显示该错误消息。

  • @ user43312:请参阅 slm 对此的回答 (2认同)

slm*_*slm 32

我认为您对 Bash 有一个内置命令kill和命令kill.

$ type -a kill
kill is a shell builtin
kill is /usr/bin/kill
kill is /bin/kill
Run Code Online (Sandbox Code Playgroud)

您正在阅读的手册页指的是kill位于/bin. 使用完整路径来召唤它:

$ /bin/kill -p sleep
16486
Run Code Online (Sandbox Code Playgroud)

顺便说一下,/usr/bin/kill这只是一个链接/bin/kill

$ ls -l /usr/bin/kill
lrwxrwxrwx 1 root root 14 Feb  9  2011 /usr/bin/kill -> ../../bin/kill

$ readlink -m /usr/bin/kill
/bin/kill
Run Code Online (Sandbox Code Playgroud)