Linux 如何获取特定流程的流程id?

Linux 如何获取特定流程的流程id?,linux,bash,process,grep,ps,Linux,Bash,Process,Grep,Ps,假设有三个进程的名称分别为abc、abc和abcde 我正在使用以下命令查找进程id: ps -ef | grep abc | grep -v grep 这给出了所有3个进程及其相应PID的输出: user 6009 1 0 May 11 ? 0:23 ./abc user 28047 1 0 Apr 24 ? 0:04 ./abcd user 28548 1 0 Apr 27 ? 0

假设有三个进程的名称分别为
abc
abc
abcde

我正在使用以下命令查找进程id:

ps -ef | grep abc | grep -v grep
这给出了所有3个进程及其相应PID的输出:

user 6009      1   0   May 11 ?           0:23 ./abc
user 28047     1   0   Apr 24 ?           0:04 ./abcd
user 28548     1   0   Apr 27 ?           0:04 ./abcde
现在我想要的是一个grep东西,它只输出
abc
的进程id,而不返回
abcd
abcde
。我知道使用grep-v“processname”可以消除我想要的东西,但有什么简单而具体的吗?

当然,有:

pidof
以下是手册页:

例如写:

pidof abc
输出:

6009

i、 e.
abc

之后的行尾(
$
),为避免必须插入
grep-v grep
,请执行以下操作:

ps -ef | grep '[a]bc\>'
\>
是字尾边界标记,因此您将无法匹配“abcd”或“abcde”

将一个字符放入括号表达式意味着正则表达式将匹配字符串
abc
,但它将不匹配字符串
grep[a]bc

我经常这样做,以至于我编写了一个函数,
psg

psg () { 
    local -a patterns=()
    (( $# == 0 )) && set -- $USER
    for arg do
        patterns+=( "-e" "[${arg:0:1}]${arg:1}" )
    done
    ps -ef | grep "${patterns[@]}"
}
这正是我们的目的


具体来说,您可以使用
pgrep-xabc

它正在使用我的
ps
-我不知道关于这个程序的不同标准。但也许@eugeniurosca建议的
-w
选项是一种节约方式。这正是我想要的。谢谢:)@KuntalShaw,别忘了接受一个答案:如果这里有任何适合你需要的答案,你最好点击绿色的钩子接受这个答案。
ps -ef | grep '[a]bc\>'
psg () { 
    local -a patterns=()
    (( $# == 0 )) && set -- $USER
    for arg do
        patterns+=( "-e" "[${arg:0:1}]${arg:1}" )
    done
    ps -ef | grep "${patterns[@]}"
}