回答:
grepの-v
スイッチは結果を逆にし、キューから除外します。次のようにします:
ps aux | grep daemon_name | grep -v "grep daemon_name" | awk "{ print \$2 }"
更新しました。次のように-C
スイッチを使用してコマンド名を指定することもできます。
ps -C daemon_name -o pid=
後者-o
は、リストに含める情報の列を決定します。pid
プロセスID列のみをリストします。そして、=
その後の等号pid
は、その列のタイトルがないことを意味するため、明確な数字(PID)のみを取得します。
お役に立てれば。
文字クラスのトリックを使用できます。「[d]」は「d」のみと一致しません。
ps aux | grep [d]aemon_name | awk "{ print \$2 }"
私はこれを使用することを好む| grep -v grep
。
| grep -v grep
、コードを再検討すると理解しやすくなります。
"[d]" does not match "[d]" only "d"
ですか?
grep
コマンドはコマンド自体のps
出力行と一致しませんgrep
(元の質問では「2番目のPID」と呼ばれていました)。expression a[xy]d
はtextと一致しませんa[xy]d
が、text axd
またはtextと一致しますayd
。したがって、expression はtextと[f]oo
一致しますfoo
が、textとは一致しません[f]oo
。それが明確であることを願っています。
ps
より信頼性の高い代替手段がある場合は、の出力の解析を避けてください。
pgrep daemon_name
pidof daemon_name
pgrep
pidof
完全に一致しながら部分文字列で検索-私が必要なものを完全に!ありがとう!
pgrep
名前でプロセスのpidを探すために使用します:
pgrep proc_name
結果に追加のプロセス名(-l
)がある場合:
pgrep -l proc_name
プロセス名(-l
)および引数(-f
)を探して表示します。
pgrep -lf proc_name_or_argument
良い点pgrep
は、一致としてそれ自体を報告しないことです。ただし、pidを取得してからpgrep
、対応するプロセスを終了する必要はありませんkill
。pkill
代わりに使用します:
pkill proc_name
(デフォルトではなく)SIGKILL
信号(-9
または-KILL
)を指定SIGTERM
します。
pkill -9 proc_name
プロセス名(-l
)と引数(-f
)を探し、シグナル(または)で-I
強制終了する前に確認を求めます():SIGKILL
-9
-KILL
pkill -KILL -Ilf proc_name_or_argument
この-I
オプションはpkill
、OS X Mavericksなどの一部のバージョンでのみ利用可能であることに注意してください。
この行は、「grep」を除くpid(プロセスID)を返します
PID=$(ps aux | grep '/usr/bin/python2.7 manage.py SES__boto3_sqs_read' | grep -v grep)