我想计算给定用户启动的非睡眠进程的数量。我知道睡眠进程是ps
状态变量中带有“S”或“D”的进程。我也知道我可以从包含变量的列表中计算进程,user
并state
通过:
ps -e -o user,state | grep -c 'username'
同样,我知道我可以通过以下方式计算睡眠过程:
ps -e -o user,state | grep -c 'S|D'
但是,我无法弄清楚如何使用这两个信息来计算用户启动的非睡眠进程username
。
我想计算给定用户启动的非睡眠进程的数量。我知道睡眠进程是ps
状态变量中带有“S”或“D”的进程。我也知道我可以从包含变量的列表中计算进程,user
并state
通过:
ps -e -o user,state | grep -c 'username'
同样,我知道我可以通过以下方式计算睡眠过程:
ps -e -o user,state | grep -c 'S|D'
但是,我无法弄清楚如何使用这两个信息来计算用户启动的非睡眠进程username
。
在命令的输出中
状态是每一行的最后一个字符。所以我们基本上计算包含给定用户名的行,然后既不以 a
S
也不以 a结尾D
:这将找到(或计算)包含单词
pduck
(我的用户名)并且不以S
or结尾的所有行D
。这
-E
是必要的,所以grep
理解正则表达式。@steeldriver在评论中建议“选择用户
-u pduck
并从输出字段列表中完全省略它”。我同意,这更好,但是我们需要删除-e
开关,因为这将选择所有进程(不仅是 user 的那些pduck
):