`kill -p`真的有效吗?


11

在它的手册页中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:找不到命令

我有没有犯错?


11
需要注意的是,当你在命令输入,你取出[ ]支架,换成signalSIGHUPpid123?你为什么这么做?因为你知道,符号[signalpid是元语法,而不是文字。它们指示什么是语法。好吧,|符号是同一回事:语法的另一种元句法指示符。[a | b]表示:可选的语法项,可以是a或之一b(但不能同时是两者,因为它必须是一项)。
卡兹(Kaz)2013年

感谢您的指导。顺便问一下,您如何发音[a | b]
user43312 2013年

嗯 “可选的A或B”。
卡兹(Kaz)

Answers:


51
kill [ -s signal | -p ]

手册页中的此语法表示:

您可以使用kill -s signal 也可以使用kill -p,但不能同时使用-s-p

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

当您键入

foo | bar

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


谢谢,@ Mat。所以我给一个命令像kill -p 123。它说bash: kill: p: invalid signal specification。并kill -p SIGINT 123说同样的话。我认为没有根据语法放置信号的地方。您介意仅演示该-p选项的使用吗?
user43312 2013年

2
@ user43312:请参见slm的答案
Mat Mat

32

我认为您感到震惊的是,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

这确实有效。我感谢所有的演示。
user43312 2013年

@ user43312-NP。例子总是比手册页8-)更容易理解。
slm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.