私はkillに精通しています コマンド、そしてほとんどの場合、kill -9を使用します プロセスを強制的に強制終了するために、killで使用できる他の多くのシグナルがあります。 。しかし、pkillのユースケースは何でしょうか。 およびkillall 、すでにkillコマンドがある場合。
pkillを実行します およびkillall killを使用する それらの実装におけるコマンド?つまり、それらはkillの単なるラッパーです。 または、独自の実装がありますか?
pgrepの方法も知りたいです コマンドは、プロセス名からプロセスIDを取得します。
これらのコマンドはすべて、同じ基盤となるシステムコールを使用していますか?パフォーマンスの観点から、どちらが速いかという違いはありますか?
承認された回答:
kill コマンドは、killの非常に単純なラッパーです。 システムコール 、プロセスID(PID)についてのみ知っています。 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 ではない。パフォーマンスに違いがあるかどうかはわかりませんでした。自分でベンチマークする必要があります。