実行中のプロセスのpidを返す一行を探しています
現在、私は持っています
ps -A -o pid,cmd|grep xxx|head -n 1
そして、これはこぶしのpid, command
を返します。出力から最初の数字だけが必要で、残りは無視します。ここでは sed
や awk
が役に立つと思いますが、私の経験は限られています
また、これにはもう一つ問題があり、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