ps aux | grep firefox
文字列「firefox」を持つすべてのプロセスをリストします
ps aux | grep -v firefox
文字列「firefox」なしですべてのプロセスをリストします
ps aux | grep -v grep | grep firefox
?
この2番目のgrepは何をしますか? grep自体はコマンドですが、なぜ別のgrepをgrepしているのですか?
次のようなコマンドを実行すると
ps aux | grep firefox
次に、探しているWordが存在するため、grep
プロセスitselfが出力に表示されることがあります。例えば私のマシンで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
プロセス3384はgrep
コマンドであり、Word chromeが表示されるため一致します。
これを回避するには、2番目の| grep -v grep
を追加してその行を削除します。
チートがあります...
ps aux | grep '[f]irefox'
grep '[f]irefox'
はgrep firefox
とまったく同じ行に一致しますが、grep
コマンドは、Wordが文字通りそのコマンドに表示されないため、それ自体に一致することはありません。
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
のマニュアルも参照してください。
分析[ps aux | grep -v grep | grep firefox
]
ps aux
は、プロセスの出力を提供します。最初のgrep(grep -v grep
)は、そこにフィードされるすべての行を、grep
を含むps aux
から削除します。その後、Word firefox
に対して出力が再度grepped(grep firefox
)され、出力が提供されます。