web-dev-qa-db-ja.com

pkillとkillallの違いは何ですか?

pkillにはkillallよりも多くのフィルタリングルールがあることを知っています。私の質問は、次の違いは何ですか?

pkill [signal] name

そして

killall [signal] name

私はkillallがより効果的であり、nameプログラムと一致するすべてのプロセスとサブプロセスを(そして再帰的に)強制終了することを読みました。 pkillもこれをしませんか?

54
mavillan

pgrep および pkill ユーティリティは、SunのSolaris 7で導入され、 g33klordが記載されている のように、名前と一致するパターンを引数として使用します実行中のプロセスの。 pgrepは一致するプロセスのリストを出力するだけですが、pkillは指定されたシグナル(またはデフォルトではSIGTERM)をプロセスに送信します。 pgreppkillの間の一般的なオプションとセマンティクスは、注意して最初にpgrepを使用してリスト照合プロセスを確認し、次にpkillを使用してそれらを強制終了する場合に役立ちます。 pgrepおよびpkillprocps パッケージによって提供されます。これは、 pstop などの他の/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のSolarisIBMのAIX および- HPのHP-UX )特定のユーザーが強制終了できるallプロセスを強制終了し、rootで実行されている場合はシステムを効果的にシャットダウンします。

Linuxのpsmiscユーティリティは [〜#〜] bsd [〜#〜] に移植されており(拡張機能では Mac OS X )、したがって、killallで「killプロセス」が実行されます。名前で」セマンティクス。

49
Thomas Nyman

pkillは、あなたが言及したフィルターと非常に再利用可能なpgrepとペアになっているという事実の両方から、将来の世代に教える価値があるものです。それらは同じ方法でプロセスを強制終了し、再帰的に強制終了することもありません。pgrepを使用すると、セッション(ttyごと、setsetidと考える)またはプロセスグループ(ジョブ制御を考える)で選択できます。

14
Gabriel

1つの違いは、killallが引数としてプロセスの正確な名前を取得するのに対し、pkillは部分的または完全な名前を取得できることです。

この質問 を参照して、pkillについて詳しく知ることができます

8
electropoet

killall-プロセスを名前で強制終了します。 killallコマンドを使用して、コマンド名、特定のユーザーが所有するプロセス、またはシステム全体のすべてのプロセスなど、選択基準に一致する1つ以上のプロセスに信号を送信します。

pkill-指定したシグナル(デフォルトではSIGTERM)をstdoutにリストするのではなく、各プロセスに送信します。 pkillkillallのような複数のプロセスに信号を送ることができますが、以下の任意の組み合わせを含むことができる高度な選択基準を使用することもできます。

コマンドUID親端末

1
user196507