如何获取特定进程的进程ID?
how to get process id of specific process?
假设有 3 个进程,名称为 abc
、abcd
和 abcde
。
我正在使用以下命令找出进程 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,而不返回 abcd
和 abcde
。我知道使用 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
。
假设有 3 个进程,名称为 abc
、abcd
和 abcde
。
我正在使用以下命令找出进程 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,而不返回 abcd
和 abcde
。我知道使用 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
。