pkill
にはkillall
よりも多くのフィルタリングルールがあることを知っています。私の質問は、次の違いは何ですか?
pkill [signal] name
そして
killall [signal] name
私はkillall
がより効果的であり、name
プログラムと一致するすべてのプロセスとサブプロセスを(そして再帰的に)強制終了することを読みました。 pkill
もこれをしませんか?
pgrep
および pkill
ユーティリティは、SunのSolaris 7で導入され、 g33klordが記載されている のように、名前と一致するパターンを引数として使用します実行中のプロセスの。 pgrep
は一致するプロセスのリストを出力するだけですが、pkill
は指定されたシグナル(またはデフォルトではSIGTERM
)をプロセスに送信します。 pgrep
とpkill
の間の一般的なオプションとセマンティクスは、注意して最初にpgrep
を使用してリスト照合プロセスを確認し、次にpkill
を使用してそれらを強制終了する場合に役立ちます。 pgrep
およびpkill
は procps パッケージによって提供されます。これは、 ps
、 top
などの他の/proc
ファイルシステムユーティリティも提供します、 free
、特に uptime
。
killall
コマンドは psmisc パッケージによって提供され、pkill
とは異なります。デフォルトでは、シグナルが送信されるプロセスを決定するときに、引数名と完全に一致します(最初の15文字まで)。 。 -e
、--exact
オプションを指定して、15文字を超える名前の完全一致を要求することもできます。これにより、killall
と比較して、pkill
の使用が多少安全になります。指定された引数にスラッシュ(/
)文字が含まれている場合、引数はファイル名として解釈され、その特定のファイルを実行しているプロセスがシグナル受信者として選択されます。 killall
は、-r
、--regexp
オプションを介したプロセス名の正規表現マッチングもサポートしています。
他にも違いがあります。たとえば、killall
コマンドには、年齢(-o
、--older-than
および-y
、--younger-than
)でプロセスを照合するオプションがありますが、pkill
は特定のプロセスのみを強制終了するように指示できますターミナル(-t
オプションを使用)。明らかに、2つのコマンドには特定のニッチがあります。
nix System V の子孫のシステムでは killall
コマンド(特に SunのSolaris 、 IBMのAIX および- HPのHP-UX )特定のユーザーが強制終了できるallプロセスを強制終了し、rootで実行されている場合はシステムを効果的にシャットダウンします。
Linuxのpsmiscユーティリティは [〜#〜] bsd [〜#〜] に移植されており(拡張機能では Mac OS X )、したがって、killall
で「killプロセス」が実行されます。名前で」セマンティクス。
pkill
は、あなたが言及したフィルターと非常に再利用可能なpgrep
とペアになっているという事実の両方から、将来の世代に教える価値があるものです。それらは同じ方法でプロセスを強制終了し、再帰的に強制終了することもありません。pgrep
を使用すると、セッション(ttyごと、setsetidと考える)またはプロセスグループ(ジョブ制御を考える)で選択できます。
1つの違いは、killall
が引数としてプロセスの正確な名前を取得するのに対し、pkill
は部分的または完全な名前を取得できることです。
この質問 を参照して、pkillについて詳しく知ることができます
killall
-プロセスを名前で強制終了します。 killall
コマンドを使用して、コマンド名、特定のユーザーが所有するプロセス、またはシステム全体のすべてのプロセスなど、選択基準に一致する1つ以上のプロセスに信号を送信します。
pkill
-指定したシグナル(デフォルトではSIGTERM)をstdoutにリストするのではなく、各プロセスに送信します。 pkill
はkillall
のような複数のプロセスに信号を送ることができますが、以下の任意の組み合わせを含むことができる高度な選択基準を使用することもできます。
コマンドUID親端末