私はこのコマンドに精通していますkill
。ほとんどの場合、kill -9
このコマンドを使用してプロセスを強制終了します。このコマンドで使用できる他の信号もたくさんありますkill
。しかし、pkill
ユースケースが何であるか、すでにkillコマンドがあるかどうかを知りたいです。killall
実装時にこのコマンドを実行してpkill
使用しますか?私の言葉は、ちょうどラッパーですか、それとも独自の実装がありますか?killall
kill
kill
pgrep
また、コマンドがプロセス名からプロセスIDを取得する方法も知りたいです。
これらすべてのコマンドは同じ基本システムコールを使用しますか?パフォーマンスの観点からどのような違いが速いですか?
答え1
このkill
コマンドは非常に単純なラッパーです。kill
システムコール、プロセスID(PID)のみを知っています。pkill
そしてkillall
包装もしてkill
システムコール、(実際にはシステムコールのlibcライブラリを直接呼び出します)が、PIDはプロセス名、プロセス所有者、セッションID、およびその他の情報に基づいて決定できます。
またはを使用して方法と操作を確認できますpkill
。 Linuxでは、両方ともファイルシステムを読み取り、見つかった各pid(ディレクトリ)に対して名前または他の属性でプロセスを識別する方法でパスを参照します。技術的にこれを行う方法は、カーネルとシステムによって異なります。通常、2番目のフィールドにコマンド名を含む内容を読み取ります。各PIDのprocエントリのエントリを見つけて確認してください。killall
ltrace
strace
/proc
/proc/<PID>/stat
pkill -f
pgrep
/cmdline
pkill
そしてシステムコールをpgrep
使用してください。そうでなければそうではありません。パフォーマンスの違いがあるかどうかは言えません。直接ベンチマークする必要があります。readproc
killall
答え2
より実用的な答え:
kill
プロセス終了(SIGTERM)信号は、デフォルトでSIGTERMである指定されたプロセスID(10341など)に対してオペレーティングシステムに送信されます。実際には他の信号も指定できます(例:強制停止するには-9)。killall
SIGTERM は、名前と正確に一致するすべてのプロセスに送信されます。さらに、ユーザによるサブセットなどの他の利点も提供される。pkill
SIGTERM は、指定されたパターンに一致するすべてのプロセスに送信されます。フードの下でpgrepを使用してください。
答え3
KillとKillallは、プロセスを終了する方法を提供するツールです。最初はPID、2番目は名前です。 pgrep(リスト)とpkill(デフォルトkill)は、名前やその他の属性でプロセスにメッセージを送信する方法を提供するツールです。以下を参照してください。http://linux.die.net/man/1/pkill シグナルに関する追加情報:http://linux.die.net/man/7/signal