私はkill
コマンドに精通しており、ほとんどの場合、強制的にプロセスを強制終了するためにkill -9を使用しますが、kill
で使用できる他の多くのシグナルがあります。しかし、すでにkillコマンドがある場合、pkill
とkillall
の使用例は何でしょうか。
pkill
およびkillall
は、実装でkill
コマンドを使用しますか?つまり、これらはkill
の単なるラッパーであるのか、それとも独自の実装を持っているのか?
pgrep
コマンドがプロセス名からプロセスIDを取得する方法についても知りたいです。
これらのコマンドはすべて、同じ基本的なシステムコールを使用していますか?パフォーマンスの観点からの違いはありますか?どちらが速いですか?
kill
コマンドは、プロセスID(PID)のみを認識するkill
システムコールの非常に単純なラッパーです。 pkill
およびkillall
もkill
システムコールへのラッパーです(実際には、システムコールを直接呼び出すlibcライブラリへ)。プロセス名、プロセスの所有者、セッションIDなどに基づいて、PIDを決定できます。
pkill
およびkillall
がどのように機能するかは、ltrace
またはstrace
を使用して確認できます。 Linuxでは、どちらも/proc
ファイルシステム、および検出された各pid(ディレクトリ)について、名前または他の属性によってプロセスを識別する方法でパスをたどります。これがどのように行われるかは、技術的に言えば、カーネルとシステムに固有です。一般的に、彼らは/proc/<PID>/stat
2番目のフィールドとしてコマンド名が含まれています。ために pkill -f
とpgrep
は/cmdline
各PIDのprocエントリのエントリ。
pkill
とpgrep
はreadproc
システムコールを使用しますが、killall
は使用しません。パフォーマンスに違いがあるかどうかはわかりません。自分でベンチマークする必要があります。
killおよびkillallは、プロセスを強制終了する方法を提供するツールです。 1つ目はPID、2つ目は名前です。 pgrep(リスト)とpkill(デフォルトではkill)は、名前またはその他の属性によってプロセスにメッセージを送信する方法を提供するツールです。以下を参照してください。 http://linux.die.net/man/1/pkill シグナルに関する詳細情報: http://linux.die.net/man/7/signal