Kill、pkill、Killallの違いは何ですか?

Kill、pkill、Killallの違いは何ですか?

私はこのコマンドに精通していますkill。ほとんどの場合、kill -9このコマンドを使用してプロセスを強制終了します。このコマンドで使用できる他の信号もたくさんありますkill。しかし、pkillユースケースが何であるか、すでにkillコマンドがあるかどうかを知りたいです。killall

実装時にこのコマンドを実行してpkill使用しますか?私の言葉は、ちょうどラッパーですか、それとも独自の実装がありますか?killallkillkill

pgrepまた、コマンドがプロセス名からプロセスIDを取得する方法も知りたいです。

これらすべてのコマンドは同じ基本システムコールを使用しますか?パフォーマンスの観点からどのような違いが速いですか?

答え1

このkillコマンドは非常に単純なラッパーです。kill システムコール、プロセスID(PID)のみを知っています。pkillそしてkillall包装もしてkill システムコール、(実際にはシステムコールのlibcライブラリを直接呼び出します)が、PIDはプロセス名、プロセス所有者、セッションID、およびその他の情報に基づいて決定できます。

またはを使用して方法と操作を確認できますpkill。 Linuxでは、両方ともファイルシステムを読み取り、見つかった各pid(ディレクトリ)に対して名前または他の属性でプロセスを識別する方法でパスを参照します。技術的にこれを行う方法は、カーネルとシステムによって異なります。通常、2番目のフィールドにコマンド名を含む内容を読み取ります。各PIDのprocエントリのエントリを見つけて確認してください。killallltracestrace/proc/proc/<PID>/statpkill -fpgrep/cmdline

pkillそしてシステムコールをpgrep使用してください。そうでなければそうではありません。パフォーマンスの違いがあるかどうかは言えません。直接ベンチマークする必要があります。readprockillall

答え2

より実用的な答え:

  • killプロセス終了(SIGTERM)信号は、デフォルトでSIGTERMである指定されたプロセスID(10341など)に対してオペレーティングシステムに送信されます。実際には他の信号も指定できます(例:強制停止するには-9)。

  • killallSIGTERM は、名前と正確に一致するすべてのプロセスに送信されます。さらに、ユーザによるサブセットなどの他の利点も提供される。

  • pkillSIGTERM は、指定されたパターンに一致するすべてのプロセスに送信されます。フードの下でpgrepを使用してください。

答え3

KillとKillallは、プロセスを終了する方法を提供するツールです。最初はPID、2番目は名前です。 pgrep(リスト)とpkill(デフォルトkill)は、名前やその他の属性でプロセスにメッセージを送信する方法を提供するツールです。以下を参照してください。http://linux.die.net/man/1/pkill シグナルに関する追加情報:http://linux.die.net/man/7/signal

関連情報