web-dev-qa-db-ja.com

「kill -p」は本当に機能しますか?

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
user43312
kill [ -s signal | -p ]

マニュアルページのこの構文は、次のことを意味します。

kill -s signalを使用できますまたはkill -pを使用できますが、-s-pを同時に使用することはできません。

パイプ(|)は(排他的)を表すか、ドキュメントではコマンドの一部ではありません。

入力すると

foo | bar

シェルでは、foobarの起動を試み、fooの出力をbarプログラムにパイプします。 (それはfoo(またはbar)ではなく、それを行うシェルです。|はどちらのプロセスにも渡されません。)あなたの場合、2番目の部分は-p 123であるため、シェルは-pという実行可能ファイルを見つけようとし、そのエラーメッセージで失敗します。

51
Mat

コマンドkillとともに、killと呼ばれるBashへの組み込みコマンドがあるという事実につまずいたと思います。

$ type -a kill
kill is a Shell builtin
kill is /usr/bin/kill
kill is /bin/kill

あなたが読んでいるマニュアルページは、/binの下にあるkillコマンドを参照しています。フルパスを使用して呼び出します。

$ /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
32
slm