Killコマンドで-execを使用する

Killコマンドで-execを使用する

Kill および exec コマンドを使用する次のコマンドを実行しようとしています。

kill -l -exec grep -i 'term' {} +

kill -lはすべての終了シグナルのリストを返すので、大文字と小文字を区別しない-iフラグと一緒にgrepを使用して、「term」という単語を含むすべてのシグナルを見つけたいと思います。。ただし、次のエラーを返します。なぜこれが起こるのかを提案できる人はいますか?

-bash: kill: grep: invalid signal specification
-bash: kill: -i: invalid signal specification
15
-bash: kill: {}: invalid signal specification
-bash: kill: +: invalid signal specification

ベストアンサー1

-exec cmd {} +findコマンドとは別のコマンドの慣用語ですfindcmd所有ファイルを実行するために使用されます。確立されたパラメータとして。-exec持ついいえよく呼ばれるオプションスルブ式の条件と作業チェーンを形成するために使用されますfindfind検索を開始する必要があるファイル/ディレクトリのリストの前に渡されるオプションもサポートされています)。

killプロセスIDまたはそれらが属するシェル操作に基づいてプロセスにシグナルを送信するためのほとんどのシェルに組み込まれているコマンドです。

-lほとんどの実装は、実装ごとに異なる形式で送信できる信号を一覧表示するオプションもサポートしています。一部は 1 行に 1 つのシグナルをリストし、一部は列別にリストし、一部はスペースで区切り、一部はシグナル名と番号も含まれます。

オプションに加えて、-lシグナル名または数字(SIG一部の実装ではプレフィックスの有無)を渡す場合、一部の実装はkillその信号番号/名前を出力しますが、一部の実装では常に名前を印刷し、一部の実装では数字のみを受け入れます。

だから:

kill -l TERM

たとえば、シェル組み込み機能を含む一部のkill実装では、次のように出力されます。killzsh

15

15すべてではありませんが、ほとんどのシステムでSIGTERMの実際の値は何ですか?

zshシェルでは、シグナル名(+ EXITでも使用)を特殊配列に使用することtrapもできます。$signals

$ echo $signals
EXIT HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS ZERR DEBUG

与えられた信号の信号番号は、配列のインデックスから1を引いたものです。

$ echo $signals[15+1]
TERM
$ echo $(( signals[(I)TERM] - 1 ))
15

または大文字と小文字を区別しない一致の場合:

$ set -o extendedglob
$ echo $(( signals[(I)(#i)term] - 1 ))
15

kill -l term多くの実装でも有効ですkill)。

おすすめ記事