在它的手册页中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.
但是我在 RH 和 RHEL 中尝试了很多次,像这样的命令kill -s SIGHUP |-p 123
从来没有工作过,并且总是报告错误
bash: -p: 未找到命令
我犯了什么错误吗?
答案1
kill [ -s signal | -p ]
手册页中的此语法含义是:
您可以使用
kill -s signal
或者您可以使用kill -p
,但不能同时使用-s
两者-p
。
管道 ( |
) 代表(独占),或者在文档中,它不是命令的一部分。
当您输入时
foo | bar
在您的 shell 中,它将尝试启动foo
和bar
,并将 的输出通过管道传输foo
到bar
程序。 (这是 shell 执行的操作,而不是foo
(或bar
),不会|
将 传递给任何一个进程。)在您的情况下,第二部分是-p 123
,因此 shell 尝试查找名为的可执行文件-p
,但失败并显示该错误消息。
答案2
我认为您会因为 Bash 有一个名为 的内置命令kill
以及命令 而被绊倒kill
。
$ type -a kill
kill is a shell builtin
kill is /usr/bin/kill
kill is /bin/kill
您正在阅读的手册页指的是kill
位于 下的命令/bin
。使用完整路径来召唤它:
$ /bin/kill -p sleep
16486
顺便说一句,这/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