私は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
ではない。パフォーマンスに違いがあるかどうかはわかりませんでした。自分でベンチマークする必要があります。