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


11

そのmanページに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
あなたはコマンドで入力したとき、あなたが削除されたことに注意[ ]ブラケットを、そして交換しsignalSIGHUPpidして123?どうしてそんなことをしました?シンボル[signalおよびpidは、リテラルではなくメタ構文であることを知っているからです。それらは構文が何であるかを示します。まあ、|シンボルは同じものです:構文の別のメタ構文インジケーター。[a | b]意味:オプションの構文アイテム。どちらかaまたはb(1つのアイテムである必要があるため、両方ではありません)
Kaz

ご指導ありがとうございます。ちなみに、どう発音し[a | b]ますか?
user43312 2013

うーん。「オプションのAまたはB」。
Kaz

回答:


51
kill [ -s signal | -p ]

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

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

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

入力すると

foo | bar

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


ありがとう、@マット。だから私はのようなコマンドを与えkill -p 123ます。それは言うbash: kill: p: invalid signal specification。そしてkill -p SIGINT 123同じことを言います。構文に従って信号を配置する場所はないと思います。-pオプションの使用のデモンストレーションだけをしてもよろしいですか?
user43312

2
@ user43312:そのためのslmの回答を参照
Mat

32

コマンドとkill一緒に呼び出されるBashへの組み込みコマンドがあるという事実につまずいたと思います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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.