我正在编写一个shell脚本,我希望得到一个名为“ABCD”的进程的PID。我做的是:
process_id=`/bin/ps -fu $USER|grep "ABCD"|awk '{print $2}'`
这得到了两个进程的PID,即进程ABCD和GREP命令本身的内容,如果我不想获得执行GREP的PID并且我只想要ABCD进程的PID?
请建议。
答案 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
答案 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 '^[^ ]+'