私は1つのシェルスクリプトを書いていますが、「ABCD」という名前の1つのプロセスのPIDを取得したいと思います。私がしたことは:
process_id=`/bin/ps -fu $USER|grep "ABCD"|awk '{print $2}'`
これは、2つのプロセスのPID、つまりプロセスABCDとGREPコマンド自体のPIDを取得します。GREPのPIDを実行したくなく、ABCDプロセスのみのPIDが必要な場合はどうなりますか?
提案してください。
Grep自体をgrepするだけです!
process_id=`/bin/ps -fu $USER| grep "ABCD" | grep -v "grep" | awk '{print $2}'`
pidof ABCD
を使用しようとしましたか?
その非常に簡単です。 [〜#〜] 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に置き換える必要があります。
psには次のオプションがあります。
process_id=`/bin/ps -C ABCD -o pid=`
grep
を廃止して、awk
のみを使用することもできます。awk
の expression matching を使用して、プロセス名に一致しますが、それ自体には一致しません。
/bin/ps -fu $USER | awk '/ABCD/ && !/awk/ {print $2}'
このコマンドを使用して特定のプロセスのpidをgrepし、$ bをエコーして実行中のプロセスのpidを出力できます。
b = ps -ef | grep [f]irefox | awk '{ printf $2 }'
エコー$ b