在Shell脚本中获取进程的PID

时间:2013-06-06 14:42:00

标签: linux shell unix pid

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

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

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

请建议。

8 个答案:

答案 0 :(得分:36)

只是去看看grep本身!

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

答案 1 :(得分:23)

您是否尝试过使用pidof ABCD

答案 2 :(得分:5)

非常直截了当。 ABCD 应替换为您的进程名称。

#!/bin/bash

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

有时您需要用软件名称替换 ABCD 。示例 - 如果您运行像java -jar TestJar.jar &这样的java程序,那么您需要用 TestJar.jar

替换 ABCD

答案 3 :(得分:2)

ps有一个选项:

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

答案 4 :(得分:1)

您可以使用此命令来grep特定进程的pid& echo $ b打印任何正在运行的进程的pid

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

echo $ b

答案 5 :(得分:1)

您也可以取消使用grep,而仅使用awk
使用awk的{​​{3}}来匹配进程名称,而不是本身。

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

答案 6 :(得分:1)

ps | pgrep ABCD

您可以尝试使用上面的命令来返回ABCD进程的进程ID。

答案 7 :(得分:1)

我找到了一个更好的方法。

top -n 1 | grep "@#" | grep -Eo '^[^ ]+'