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[@]}"
}