psの出力を解析する単一のコマンドを使用して、実行中のプロセスのpidを取得する方法は?


22

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

現在私は持っています:

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

そして、これは拳を返しますpid, command。出力の最初の数だけが必要で、残りは無視します。私は考えsedたりawk、ここに役立つだろうが、彼らと私の経験が限られています。

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

そのプロセスを強制終了するなど、何か他のことをするために出力を再利用したいので、1行にすることが本当に重要です。


1
ヘッドにパイプし、-n 1で戻る行を指定しますか?
マイクマクマホン

回答:


28

プロセスのPIDだけが必要な場合はpgrep、利用可能な場合は利用できます。pgrep <command>(コマンド実行中の複数のインスタンスを使用して、使用することができ、その場合には、存在する場合やPIDのリストコマンドのPIDを返しますheadまたは他の適切なコマンドを)
これが役に立てば幸い!


pgrepの私の通常の使用法:kill `pgrep xxx`
スティーブ

20
@steve:おそらくあなたはを見るべきですpkill
追って通知があるまで一時停止します。

7

もう1つコマンドが必要です。スペースで区切られた値の行の最初のフィールドのみが必要です。

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

まあ、2。出力からgrep自体を削除する別のgrepを追加しました。


6

pgrepを使用するだけで、はるかに簡単です

pgrep -o -x xxxx

上記は、正確な名前を持つ最も古いプロセスを選択します


また、OPはコマンドを使用してプロセスを強制終了するため、pkill(同じ引数を使用して)最も直接的な選択になります。
bstpierre


0

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

あなたは次のようなことができます

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

xxxはプロセス名である必要があり、アンカーのためにgrepを取得しません^

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.