次のように使用する場合grep
:
ps aux | grep 'processname' | awk '{print $2}'
プロセスPIDs
がprocessname
返されます。これを使用する場合:
ps aux | grep '^processname' | awk '{print $2}'
コマンドラインが で始まるプロセスを取得しようとしていますprocessname
が、うまくいきません。
実行中のプロセスの例:
processname
other_processname
はコマンドの開始なのでPID
、最初のオプションの を取得したいと思います。processname
フラグの使用も試してみましたが-E, -e, -w
、すべて同じ結果が返されます。何が間違っているのでしょうか?
答え1
^
フィールドではなく行の開始を示します。
ps aux | grep ' processname'
より近づきますが、それでも誤検知が出る可能性があります。
他の列の幅は固定されているので、
grep '^.\{65\}processname'
ここでは、^.\{65\}
行の先頭からちょうど 65 文字です。正確な数はシステムによって異なる場合があります。
すでに awk を使用している場合は、おそらくこれがより良いオプションになります。
ps aux | awk '{ if ($11 == "processname") print $2 }'
grep を簡単にするために、ps の出力を再フォーマットすることもできます。
ps ax -o pid,args | grep '^[^ ]\+ processname'
このスイッチ-o pid,args
により、ps は PID と引数付きのコマンドのみを表示します。この式は、^[^ ]\+
行の先頭から最初のスペースまでのすべての文字と一致します。