扩展解释......相信你会接受它,因为这是你的家庭作业......
使用ps命令列出进程
$ ps
PID TTY TIME CMD
4879 pts/3 00:00:00 bash
5003 pts/3 00:00:00 ps
Run Code Online (Sandbox Code Playgroud)
哦,这只是显示当前会话的进程。我们想显示系统中的所有进程。为此,我们可以使用-e标志
$ ps -e
PID TTY TIME CMD
1 ? 00:00:05 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd/0
[and many more lines]
Run Code Online (Sandbox Code Playgroud)
但是我们如何显示哪些正在睡觉?
您可以使用-l选项或u选项。这提供了更多细节,包括过程状态。休眠进程在 STAT 列中有一个字母S或D
从 man ps
进程状态代码 以下是 s、stat 和 state 输出说明符(标题“STAT”或“S”)将显示的不同值来描述进程的状态:
Run Code Online (Sandbox Code Playgroud)D uninterruptible sleep (usually IO) R running or runnable (on run queue) S interruptible sleep (waiting for an event to complete) T stopped by job control signal t stopped by debugger during the tracing W paging (not valid since the 2.6.xx kernel) X dead (should never be seen) Z defunct ("zombie") process, terminated but not reaped by its parent
我们可以格式化ps输出以仅显示状态,以便更轻松地计算它们:
ps -e -o state
Run Code Online (Sandbox Code Playgroud)
这里我们-e用来获取所有进程和-o标志,然后是我们想要的输出类型。此命令仅输出状态字母。然后我们可以通过管道(使用|)这个输出grep来计算带有S或的行D,睡眠进程:
ps -e -o state | grep -cE 'S|D'
Run Code Online (Sandbox Code Playgroud)
grep搜索文本。该-c选项告诉它只计算匹配项而不是输出找到的文本本身。该-E选项告诉grep使用扩展的正则表达式,以便我们可以使用|字符来匹配使用表达式的东西或东西:thing|stuff。使用正则表达式时,请使用单引号以防止 shell 扩展。
如果您知道该ps命令将睡眠进程的状态输出为可S中断睡眠和D不可中断睡眠,则非常容易,并且您可以使用-o s标志来查找这些状态。现在您所要做的就是运行输出grep,以计算这些标志的出现次数。像这样:
$ ps -e -o s | grep -o 'S\|D' -c
260
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3398 次 |
| 最近记录: |