bash – ps の出力を解析する単一のコマンドを使って実行中のプロセスの pid を取得するには?

awk bash pid sed

実行中のプロセスのpidを返す一行を探しています

現在、私は持っています

ps -A -o pid,cmd|grep xxx|head -n 1

そして、これはこぶしのpid, commandを返します。出力から最初の数字だけが必要で、残りは無視します。ここでは sedawk が役に立つと思いますが、私の経験は限られています

また、これにはもう一つ問題があり、xxxが実行されていない場合はgrepのpidを返します

そのプロセスを殺すように、何か別のことをするために出力を再利用したいので、1行で済むのは本当に重要です

  22  sorin  2012-05-23


ベストアンサー

プロセスの pid を知りたいだけならば、pgrep を使うことができます。pgrep <command> はコマンドの pid を返します (複数のインスタンスが実行されている場合は pid のリストを返します)

28  another.anon.coward  2012-05-23


スペースで区切られた値の行から最初のフィールドだけを取得したい場合は、もう一つだけコマンドが必要です

ps -A -o pid,cmd|grep xxx | grep -v grep |head -n 1 | awk '{print $1}'

さて、2つ。grep自体を出力から外すためにもう一つgrepを追加してみました

7  chepner  2012-05-23


pgrepを使えばいいだけです

pgrep -o -x xxxx

上記では、正確な名前の古いプロセスを選択しています

6  None  2012-08-24


Linuxではpidof xxxで十分です

3  herve3527  2016-02-29


Cygwinで動作しているので、-Aと-oは使えませんが、こんな感じです

$ ps
PID    PPID    PGID     WINPID   TTY     UID    STIME COMMAND
4580       1    4580       4580  ?       55573   May 21 /usr/bin/mintty
5808    7072    5808       7644  pty3    55573 13:35:31 /usr/bin/ps
7072    5832    7072       6424  pty3    55573   May 21 /usr/bin/bash


$ ps | grep '/usr/bin/mintty' | head -n 1 | awk '{print $1}'
4580

0  AlG  2012-05-23


のようなことができます

ps -A -o cmd,pid | egrep "^xxx " | head -n 1 | sed -r -e 's/.* ([0-9]+)$/\1/'

とすると、xxx はプロセス名でなければならず、アンカー ^ のために grep を拾いません

0  pizza  2012-05-23


タイトルとURLをコピーしました