如何获取特定进程的进程ID?

how to get process id of specific process?

假设有 3 个进程,名称为 abcabcdabcde

我正在使用以下命令找出进程 ID:

ps -ef | grep abc | grep -v grep

这给出了所有 3 个进程及其相应 pids 的输出:

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,而不返回 abcdabcde。我知道使用 grep -v "processname" 消除了我想要的东西,但是有什么简单和具体的吗?

当然有:

pidof

这是手册页:http://linux.die.net/man/8/pidof

例如写:

pidof abc

输出:

6009
ps -ef | grep -w abc | grep -v grep
               ^
               `--- match whole words only
ps -ef | grep -w 'abc$' | grep -v grep

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 的用途。

具体来说,为此您可以使用 pgrep -x abc