我想计算由给定用户启动的非休眠进程数。我知道休眠进程是其ps
状态变量中带有“S”或“D”的进程。我还知道我可以从包含变量的列表中计算进程数user
,state
方法是:
ps -e -o user,state | grep -c 'username'
类似地,我知道我可以通过以下方式计算睡眠过程:
ps -e -o user,state | grep -c 'S|D'
但是,我不知道如何使用这两种信息来计算用户启动的非睡眠进程username
。
答案1
在命令的输出中
ps -e -o user,state
状态是每行的最后一个字符。因此,我们基本上计算包含给定用户名且不以S
或结尾的行D
:
ps -e -o user,state | grep -c -E 'pduck.*[^SD]$'
这将查找(或计算)所有包含单词pduck
(我的用户名)且不以S
或结尾的行D
。
因此理解正则表达式-E
是必要的。grep
@steeldriver在评论中建议“选择具有的用户-u pduck
并将其从输出字段列表中完全省略”我同意,这样更好,但我们需要放弃开关,-e
因为这将选择所有进程(而不仅仅是用户的进程pduck
):
ps -u pduck -o state | grep -c -E '[^SD]$'