获取进程ID

时间:2016-12-27 14:15:45

标签: linux bash shell awk grep

我读了很多关于这个论点的问题,但我无法解决我的问题。 我需要获取特定的进程ID,并编写了以下test.sh脚本:

#!/bin/sh

PID=$(ps -ef | grep abc | grep -v grep | awk '{print $2}')
echo $PID

运行此脚本如果abc进程未运行,我将获得两个不同的PID,如果abc进程正在运行,则会获得三个不同的PID。

如果我运行

ps -ef | grep abc | grep -v grep | awk '{print $2}' 
来自shell的

命令我得到了正确的结果。

修改删除最后test.sh的{​​{1}}脚本我注意到脚本打印了以下输出:

awk

怎么可能,我怎么能忽略它们?

3 个答案:

答案 0 :(得分:3)

如果您确切知道所调用的流程是什么,请使用pidof,否则,您只需使用pgrep即可保存grep|grep|awk...

请注意,当您ps|grep regexpgrep regex时,您的结果中可能会有多个条目。

答案 1 :(得分:2)

请勿使用这些工具,使用适合此目的的正确工具,使用pidof兼容POSIX标记命令-s,根据man页面说明,< / p>

-s     Single shot - this instructs the program to only return one
       pid.

使用上述内容,

processID=$(pidof -s "abc")

答案 2 :(得分:2)

我不是解析进程表的忠实粉丝。这可能是不准确的。出于与"why not parse ls"相同的原因,您可能需要查看命令pgrep

我的建议是

pgrep -u user1 abc