実行中のプロセスのPIDを返す単一の行を探しています。
現在私は持っています:
ps -A -o pid,cmd|grep xxx|head -n 1
そして、これはこぶしを返しますpid, command
。出力の最初の数だけが必要で、残りは無視します。 sed
またはawk
が役立つと思いますが、それらの経験は限られています。
また、これには別の問題があり、xxxが実行されていない場合はgrepのpidを返します。
そのプロセスを強制終了するなど、他の何かをするために出力を再利用したいので、1行にすることは本当に重要です。
プロセスのPIDだけが必要な場合は、可能であれば pgrep
を使用できます。 pgrep <command>
は、コマンドのpid(または実行中のコマンドのインスタンスが複数ある場合はpidのリスト)を返します。この場合、head
または他の適切なコマンドを使用できます)
お役に立てれば!
あと1つコマンドが必要です。スペースで区切られた値の行の最初のフィールドのみが必要です。
ps -A -o pid,cmd|grep xxx | grep -v grep |head -n 1 | awk '{print $1}'
さて、2つ。別のgrepを追加して、出力からgrep自体を削除しました。
Pgrepを使用するだけで、はるかに簡単です
pgrep -o -x xxxx
上記は正確な名前の最も古いプロセスを選択します
pidof xxx
Linuxで十分です
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
あなたは次のようなことができます
ps -A -o cmd,pid | egrep "^xxx " | head -n 1 | sed -r -e 's/.* ([0-9]+)$/\1/'
その場合、xxxはプロセス名である必要があり、アンカーのためにgrepを取得しません^