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


31

私はkillコマンドに精通していて、ほとんどの場合kill -9を使用してプロセスを強制的に強制終了しますが、他にも使用できる多くのシグナルがありますkill。しかし、すでにkillコマンドがある場合、pkillとのユースケースは何だろうと思いkillallます。

やるpkillkillall使用しkill、その実施にコマンドを?単なるラッパーであるkillか、独自の実装を持っているのですか?

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

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


2
2つのこと:kill -9デフォルトで使用する理由 -15(停止してください)および-1(モデムがハングアップしました。ご自分できれいに閉じてください)は、はるかに丁寧です。第二に。非Linuxボックスでkillallを使用することに注意してください。動作が異なる場合があります。(たとえば、solarisではすべてが削除されます。プロセス名ではフィルタリングされません)。
ヘネス

回答:


31

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

使用方法pkillまたはkillall作業は、それらを使用して、ltraceまたはstraceそれらで見ることができます。Linuxでは、/procファイルシステム全体を読み取り、見つかったpid(ディレクトリ)ごとに、名前または他の属性によってプロセスを識別する方法でパスを走査します。これがどのように行われるかは、技術的に言えば、カーネルとシステム固有です。通常、/proc/<PID>/stat2番目のフィールドとしてコマンド名が含まれる読み取り元。用pkill -fしてpgrep調べ/cmdline、各PIDのprocのエントリのエントリを。

pkillシステムコールをpgrep使用しreadprocますが、使用killallしません。パフォーマンスの違いがあるかどうかは言えません。それを自分でベンチマークする必要があります。


2

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


あなたは意味するかkillall、その名前によってプロセスを殺すために使用されていますか?この目的のためにpgrepを使用しますか?そしてkillallまた、すべての子プロセスを殺しますか?killallデフォルトでどの信号が使用しますか?
イヤズアフマドカーン

3
... Solarisを使用している場合killallを除き、この場合、強制終了する権利があるすべてのプロセスが強制終了されるため、rootであれば、事実上サーバーを再起動します。
ジェニーD

1
うん:killall chromiumクロムプロセスを殺し、pgrep chromiumPIDリストを提供し、pkill chromiumクロムを殺します。killallはデフォルトでSIGTERMシグナルを送信します(pkillとして)
dervishe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.