计算给定用户的非睡眠进程数

计算给定用户的非睡眠进程数

我想计算由给定用户启动的非休眠进程数。我知道休眠进程是其ps状态变量中带有“S”或“D”的进程。我还知道我可以从包含变量的列表中计算进程数userstate方法是:

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]$'

相关内容