web-dev-qa-db-ja.com

kill、pkill、killallの違いは何ですか

私はkillコマンドに精通しており、ほとんどの場合、強制的にプロセスを強制終了するためにkill -9を使用しますが、killで使用できる他の多くのシグナルがあります。しかし、すでにkillコマンドがある場合、pkillkillallの使用例は何でしょうか。

pkillおよびkillallは、実装でkillコマンドを使用しますか?つまり、これらはkillの単なるラッパーであるのか、それとも独自の実装を持っているのか?

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

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

35
Ijaz Ahmad Khan

killコマンドは、プロセスID(PID)のみを認識するkillシステムコールの非常に単純なラッパーです。 pkillおよびkillallkillシステムコールへのラッパーです(実際には、システムコールを直接呼び出すlibcライブラリへ)。プロセス名、プロセスの所有者、セッションIDなどに基づいて、PIDを決定できます。

pkillおよびkillallがどのように機能するかは、ltraceまたはstraceを使用して確認できます。 Linuxでは、どちらも/procファイルシステム、および検出された各pid(ディレクトリ)について、名前または他の属性によってプロセスを識別する方法でパスをたどります。これがどのように行われるかは、技術的に言えば、カーネルとシステムに固有です。一般的に、彼らは/proc/<PID>/stat 2番目のフィールドとしてコマンド名が含まれています。ために pkill -fpgrep/cmdline各PIDのprocエントリのエントリ。

pkillpgrepreadprocシステムコールを使用しますが、killallは使用しません。パフォーマンスに違いがあるかどうかはわかりません。自分でベンチマークする必要があります。

35
Otheus

killおよびkillallは、プロセスを強制終了する方法を提供するツールです。 1つ目はPID、2つ目は名前です。 pgrep(リスト)とpkill(デフォルトではkill)は、名前またはその他の属性によってプロセスにメッセージを送信する方法を提供するツールです。以下を参照してください。 http://linux.die.net/man/1/pkill シグナルに関する詳細情報: http://linux.die.net/man/7/signal

2
dervishe