ps aux | grep firefox
"firefox"という文字列を含むすべてのプロセスを一覧表示します。
ps aux | grep -v firefox
"firefox"文字列を持たないすべてのプロセスを一覧表示します。
ps aux | grep -v grep | grep firefox
?
2番目のgrepは何をしますか? grep自体はコマンドですが、なぜ別のgrepをgrepするのですか?
答え1
次のコマンドを実行するとき
ps aux | grep firefox
その後、grep
プロセスそれ自体探している単語がすでに存在するため、出力に表示されることがあります。たとえば、私のコンピュータで実行するchrome
と、同様の結果が表示されます。
% ps aux | grep chrome
sweh 3384 0.0 0.0 11128 1024 pts/1 S+ 07:08 0:00 grep chrome
sweh 23698 0.0 0.0 6384 620 ? S Jul04 0:00 /usr/lib/chromi
grep
我々は、プロセス3384が命令であり、一致することが分かる。クロム合金現れる。
これを避けるために、一部の人は2行目を追加して| grep -v grep
行を削除します。
一つあるだまされるしかし...
ps aux | grep '[f]irefox'
grep '[f]irefox'
まったく同じ行と一致しますgrep firefox
が、grep
単語が実際にコマンドに表示されないため、コマンド自体は一致しません。
答え2
このps
コマンドは、現在実行中のすべてのプロセスを出力します。まず、リストからgrep
プロセスを削除します。grep
2番目はfirefox
フィルタリングされたリストのすべてのプロセスを抽出します。
これはfirefox
、プロセスのプロセスID(PID)を取得しようとする試みの一部であり、実行中であることを確認または終了するためのものでもあります。
この場合pgrep
(またはpkill
プロセスを終了するには)を使用することをお勧めします。
if pgrep firefox 2>/dev/null; then
echo "firefox is already running"
else
echo "starting firefox..."
firefox &
done
終了firefox
:
pkill firefox
それは、いいえまず、PIDを見つけるために長い道のりを進む必要があります。
pgrep
pkill
システムのマニュアルも参照してください。
答え3
分析するps aux | grep -v grep | grep firefox
ps aux
プロセスの出力を提供します。最初のgrep()は、grep -v grep
その単語を含むすべての行を削除します。その後、出力は再びgrep()され、単語を検索して出力されます。ps aux
grep
grep firefox
firefox