在Shell脚本中获取进程的PID

问题描述 投票:0回答:9

我正在编写一个shell脚本,我想获取一个名为“ABCD”的进程的PID。我所做的是:

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

这会获取两个进程的 PID,即进程 ABCD 和 GREP 命令本身,如果我不想获取执行的 GREP 的 PID 而只想要 ABCD 进程的 PID,该怎么办?

请推荐。

linux shell unix pid
9个回答
57
投票

只需 grep 去掉 grep 本身!

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

35
投票

您尝试过使用

pidof ABCD
吗?


9
投票

这非常简单。 ABCD 应替换为您的进程名称。

#!/bin/bash

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

有时您需要将ABCD替换为软件名称。示例 - 如果您运行像

java -jar TestJar.jar &
这样的 java 程序,那么您需要将 ABCD 替换为 TestJar.jar


3
投票

ps 有一个选项:

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

2
投票

您也可以去掉

grep
并仅使用
awk

使用
awk
表达式匹配 来匹配进程名称,但不匹配进程本身。

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

1
投票

您可以使用此命令来 grep 特定进程的 pid 并 echo

$b
打印任何正在运行的进程的 pid:

b=`ps -ef | grep [A]BCD | awk '{ printf $2 }'`
echo $b

1
投票

我找到了更好的方法来做到这一点。

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

0
投票

ps | pgrep ABCD

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


0
投票

您可以使用'pgrep #prog_name'代替,它将直接返回prog_name PID。

© www.soinside.com 2019 - 2024. All rights reserved.