如何在linux中指定进程名中只获取进程ID?

ope*_*ion 49 linux shell redhat

如何在linux中只获取指定进程名的进程ID?

ps -ef|grep java    
test 31372 31265  0 13:41 pts/1    00:00:00 grep java
Run Code Online (Sandbox Code Playgroud)

根据进程ID,我会写一些逻辑.那么我如何只获取特定进程名称的进程ID.

示例程序:

PIDS= ps -ef|grep java
if [ -z "$PIDS" ]; then
echo "nothing"
else
mail test@domain.com
fi
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 63

您可以使用:

ps -ef | grep '[j]ava'
Run Code Online (Sandbox Code Playgroud)

或者如果pgrep可用则更好用:

pgrep -f java
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了两个命令,但是pgrep正在按照我的预期工作.但是第一个`ps -ef | grep'[j] ava'`无效. (3认同)

Jos*_*rez 62

您可以将输出传输到awk以仅打印PID.例如:

ps -ef | grep nginx | awk '{print $2}'
9439
Run Code Online (Sandbox Code Playgroud)


ven*_*syv 38

用这个: ps -C <name> -o pid=

  • 为什么这被否决?它不仅似乎工作,而且使用所需的命令ps,并且没有管道过滤器.在我的情况下,我不能使用管道(原因..)所以这是救命稻草.您可以花一整天时间阅读PS的手册页...感谢@ventsyv (6认同)
  • 也许是因为它不是非常便携,但其他解决方案也不是,最初的问题是用 Redhat Linux 标记的。刚刚碰巧看到我的一位工程师的提交,他需要一种可移植的方式来检测 OSX、RHEL Linux 和 AIX 上的特定 java 进程,这就是他们提出的:`ps -A -o pid,args | grep \[j]ava`. (2认同)

Nab*_*.Z. 7

此命令忽略grep进程,只返回PID:

ps -ef | grep -v grep | grep java | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)


NIE*_*dre 7

为什么不只是pidof?

pidof <process_name>
Run Code Online (Sandbox Code Playgroud)

它将返回与进程名称匹配的pid列表

https://linux.die.net/man/8/pidof

  • 在Ubuntu 18.04上就像魅力一样 (2认同)
  • 只要你没有多个实例(例如java)就可以工作 (2认同)