次のようにプロセスを終了しようとしています。
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
コマンドが役に立ちます。
答え2
あなたのプロセスは存在しません。以下を行います。
ps ax |grep mosquitto|grep -v grep
それでは何もしません。