如何在linux中指定进程名称时仅获取进程ID?
Posted
技术标签:
【中文标题】如何在linux中指定进程名称时仅获取进程ID?【英文标题】:How to get only process ID in specify process name in linux? 【发布时间】:2014-11-03 06:04:21 【问题描述】:如何在linux中只获取指定进程名的进程ID?
ps -ef|grep java
test 31372 31265 0 13:41 pts/1 00:00:00 grep java
根据进程id我会写一些逻辑。那么如何仅获取特定进程名称的进程 ID。
示例程序:
PIDS= ps -ef|grep java
if [ -z "$PIDS" ]; then
echo "nothing"
else
mail test@domain.com
fi
【问题讨论】:
【参考方案1】:您可以将输出通过管道传输到 awk 以仅打印 PID。例如:
ps -ef | grep nginx | awk 'print $2' 9439
【讨论】:
效果很好,hoverver 如果您使用输出作为变量,a | tr -d '\n' 必须在命令末尾添加。 这是一个程序,可用于选择文件中的特定记录并对其执行操作。它是如此广泛,你甚至可以用它编写一些程序。 AWK Documentation【参考方案2】:你可以使用:
ps -ef | grep '[j]ava'
或者如果pgrep
可用,那么最好使用:
pgrep -f java
【讨论】:
很好的答案 pgrep -f java 。只能用来获取PID。 您的第一个答案不仅返回 pid,还返回所有信息(在 Ubuntu 上)。 BTW:你能解释一下,括号是做什么的吗?我找不到它的文档。 方括号用于从 ps 输出中排除 grep 进程【参考方案3】:使用这个:ps -C <name> -o pid=
【讨论】:
为什么会被否决?它不仅看起来有效,而且使用所需的命令 ps 并且没有管道过滤器。就我而言,我不能使用管道(原因..)所以这是一个救星。你可以花一整天的时间阅读 PS 的手册页......谢谢@ventsyv 也许是因为它不是非常便携,但是其他解决方案也不是,并且最初的问题被标记为 Redhat Linux。碰巧看到我的一位工程师提交了一个提交,他需要一种可移植的方式来检测 OSX、RHEL Linux 和 AIX 上的特定 java 进程,这就是他们想出的:ps -A -o pid,args | grep \[j]ava
。【参考方案4】:
此命令忽略 grep 进程,只返回 PID:
ps -ef | grep -v grep | grep java | awk 'print $2'
【讨论】:
短:ps -ef | grep '[j]ava' | awk 'print $2' 我用它来获取 PID。将输出用作变量时要小心,必须在末尾添加| tr -d '\n'
。
在busybox v1.24.1 上,这对我有用:ps | grep -v grep | grep cli | awk 'print $1'
还有这个:ps | awk '$NF ~ /cli/ print $1'【参考方案5】:
为什么不只是 pidof ?
pidof <process_name>
它会返回一个匹配进程名的pid列表
https://linux.die.net/man/8/pidof
【讨论】:
在 Ubuntu 16.04 上干净快速 只要您没有多个实例(例如 java)就可以工作以上是关于如何在linux中指定进程名称时仅获取进程ID?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 c++ 获取与 WinCE 中指定进程关联的所有 Dll 的内存使用情况?