23

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

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

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

请建议。

4

8 回答 8

55

只是 grep 离开 grep 本身!

process_id=`/bin/ps -fu $USER| grep "ABCD" | grep -v "grep" | awk '{print $2}'`
于 2013-06-06T14:45:46.027 回答
32

你试过用pidof ABCD 吗?

于 2013-06-06T15:39:24.590 回答
8

这是非常直接的。ABCD应替换为您的进程名称。

#!/bin/bash

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

有时您需要用软件名称替换ABCD。示例 - 如果您运行类似的 java 程序,java -jar TestJar.jar &则需要将ABCD替换为TestJar.jar

于 2017-02-20T11:26:03.117 回答
2

ps 有一个选项:

process_id=`/bin/ps -C ABCD -o pid=`
于 2017-08-02T22:48:04.837 回答
2

您也可以取消grep并仅使用awk.
使用awk's表达式匹配来匹配进程名称,但不匹配自身。

/bin/ps -fu $USER | awk '/ABCD/ && !/awk/ {print $2}'
于 2019-01-31T02:31:35.407 回答
1

您可以使用此命令 grep 特定进程的 pid & echo$b打印任何正在运行的进程的 pid:

b=`ps -ef | grep [A]BCD | awk '{ printf $2 }'`
echo $b
于 2014-11-14T18:33:52.313 回答
1

ps | pgrep ABCD

你可以试试上面的命令返回ABCD进程的进程id。

于 2020-09-16T12:18:15.840 回答
1

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

top -n 1 | grep "@#" | grep -Eo '^[^ ]+' 
于 2021-05-03T06:30:48.650 回答