動的IDを持つプロセスは終了しません。

動的IDを持つプロセスは終了しません。

次のようにプロセスを終了しようとしています。

root@xxx:~# ps -ef | grep mosquitto
root        3083    1912  0 11:59 pts/0    00:00:00 grep --color=auto mosquitto
root@xxx:~# kill 3083
-bash: kill: (3083) - No such process
ps -ef | grep mosquitto
root        3175    1912  0 12:00 pts/0    00:00:00 grep --color=auto mosquitto
root@xxx:~# ps -ef | grep mosquitto | head -c 16 | tail -c 4
3255root@xxx:~# kill $(ps -ef | grep mosquitto | head -c 16 | tail -c 4)
-bash: kill: (3290) - No such process
root@xxx:~# pgrep mosquitto | xargs -i pstree -ps {}
root@xxx:~#

このプロセスをどのように終了できますか?

ベストアンサー1

他の答えは正確ですが、詳細は少し不足しています。

root@xxx:~# ps -ef | grep mosquitto
root        3083    1912  0 11:59 pts/0    00:00:00 grep --color=auto mosquitto

コマンドラインを使用すると、1つのプロセスのみが返されますgrep --color=auto mosquitto。これはgrep mosquittoコマンドラインから取得され、出力をフィルタリングするために使用されますps。シェルには別名がある可能性が高いですgrep=grep --color=auto

次のシェルプロンプトを受信するとすぐにgrep前のコマンドが終了したため、そのpidを持つプロセスを終了する必要はありません。同じコマンドを再実行するとgrep新しいプロセスが作成され、そのプロセスのPIDは以前のプロセスとは異なりますgrep

スケジュールによっては、プロセスgrepが出力に表示される場合と表示されない場合があります。ただし、出力をgrepするたびに、プロセスが出力に存在できると仮定するps必要があります。grepこの操作を手動で実行する場合は、この結果を無視してください。スクリプトに必要な場合にこれを防ぐためのいくつかの技術があります。

ps | grep mosquitto | grep -v grep

- を含むすべてのgrep行を無視します。

ps | grep '[m]osquitto'

これは追加のプロセスを作成しません。[m]letterのみを含む文字クラスなので、m予想パターンと一致しますがパラメータとは一致しないために機能しますgrep

検索する内容によっては、このpgrepコマンドが役に立ちます。

おすすめ記事