在Shell脚本中获取进程的PID

我正在编写一个shell脚本,我想获得名为“ABCD”的一个进程的PID。 我做的是:

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

这得到两个进程的PID,即进程ABCD和GREP命令本身,如果我不想获得执行GREP的PID,并且只想要ABCD进程的PID,该怎么办?

请build议。

只是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 -jar TestJar.jar &这样的java程序java -jar TestJar.jar &那么你需要用TestJar.jar替换ABCD

你可以使用这个命令来grep特定进程的pid和echo $ b来打印正在运行的进程的pid

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

echo $ b

PS有一个选项:

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