web-dev-qa-db-ja.com

シェルスクリプトでプロセスのPIDを取得する

私は1つのシェルスクリプトを書いていますが、「ABCD」という名前の1つのプロセスのPIDを取得したいと思います。私がしたことは:

process_id=`/bin/ps -fu $USER|grep "ABCD"|awk '{print $2}'`

これは、2つのプロセスのPID、つまりプロセスABCDとGREPコマンド自体のPIDを取得します。GREPのPIDを実行したくなく、ABCDプロセスのみのPIDが必要な場合はどうなりますか?

提案してください。

13
Mayank Jain

Grep自体をgrepするだけです!

process_id=`/bin/ps -fu $USER| grep "ABCD" | grep -v "grep" | awk '{print $2}'`
36
blue

pidof ABCDを使用しようとしましたか?

24
wizard

その非常に簡単です。 [〜#〜] abcd [〜#〜]は、プロセス名に置き換える必要があります。

#!/bin/bash

processId=$(ps -ef | grep 'ABCD' | grep -v 'grep' | awk '{ printf $2 }')
echo $processId

時々[〜#〜] abcd [〜#〜]をソフトウェア名で置き換える必要があります。例-Java Java -jar TestJar.jar &その後、[〜#〜] abcd [〜#〜]TestJar.jarに置き換える必要があります。

6
Rejuan

psには次のオプションがあります。

process_id=`/bin/ps -C ABCD -o pid=`
2

grepを廃止して、awkのみを使用することもできます。
awkexpression matching を使用して、プロセス名に一致しますが、それ自体には一致しません。

/bin/ps -fu $USER | awk '/ABCD/ && !/awk/ {print $2}'
1
Gino Mempin

このコマンドを使用して特定のプロセスのpidをgrepし、$ bをエコーし​​て実行中のプロセスのpidを出力できます。

b = ps -ef | grep [f]irefox | awk '{ printf $2 }'

エコー$ b

1
Sandeep Singh