关于选项ps
的命令r
根据man ps
它表明
r Restrict the selection to only running processes.
并根据ps --help a
它表明
r only running processes
如果tty6
执行了sleep 5000 &
命令,然后jobs
出现
[1]+ Running sleep 5000 &
预计并遵守跑步术语出现。它作为文档的两个来源。
现在,如果在同一个 tty 中执行ps r
命令,则会出现:
PID TTY STAT TIME COMMAND
5508 tty6 R+ 0:00 ps r
为什么sleep
命令没有出现?
在此之前,假设是因为 是后台进程。如果现在简单地执行该yes
命令 - 它会y
按预期永远打印 - 并且它是一个前台进程。因为tty6
被挡住了是的命令,那么如果在其他 tty 中(例如tty1
)执行该ps -t tty6 r
命令,则出现:
PID TTY STAT TIME COMMAND
5516 tty6 R+ 0:21 yes
因此,直到这里为止,可以假设r
仅适用于跑步 前景过程。
因此,这个r
选项对于了解什么脚本或命令/工具(即:maven 的目标或 gradle 的任务)被执行并且仍然运行很长时间(它针对特定的 tty)很有用。此外,因为在文档的两个地方都出现了“仅运行进程”句子(观察“过程”复数)我假设以下命令模式将被考虑
ps -t tty3 -t tty4 -t tty5 -t tty6 r
但我确实意识到以下内容,如果对于上面显示的每个 tty 执行以下命令,如下所示:
cmatrix # it is a screensaver and remains running
man ls # it remains opened
ping spring.io # it remains showing in the terminal each echo message
yes > /dev/null # it remains running but not showing nothing in the terminal
如果ps -t tty3 -t tty4 -t tty5 -t tty6 r
执行则出现:
PID TTY STAT TIME COMMAND
5598 tty6 R+ 0:05 yes
为什么另一个前台进程没有被考虑?
问题
- 该选项如何
r
运作? - 应该如何使用?
目的/目标
根据我的理解,有很多流程类型,例如“奔跑、僵尸、悬浮……”因此,要列出/检索/显示特定类型的报告 -“跑步”类别 - 理论上应该使用r
选项来检索。
此外,例如,如果执行 Maven/Gradle 命令来构建/测试具有多个选项的多个模块 - 并且需要 25 分钟,终端窗口仍然显示许多有关进程本身的行 - 所以一段时间后- 我需要知道执行了哪些命令(并且仍在运行)以及使用了哪些选项/参数 - 所以我认为该r
选项是正确使用的方法 - 这是该选项的目的r
- 对吗?
答案1
该r
选项仅显示实际正在运行的进程。睡眠不处于运行状态,但不出所料,处于睡眠状态。该程序基本上解析您的输入并调用sleep()
,仅此而已。前台程序和睡眠程序之间是有区别的。前台和后台状态主要是关于它在 shell 中的位置,而不是它是否消耗 CPU。
大多数时候,进程实际上并没有运行那么多。如果运行 top 并查看 和S
字段%CPU
,您可以看到大多数进程的状态为 S,并且已用 CPU 时间的百分比很小。
您可能希望 psr
选项仅表示具有状态的进程R
,但由于某种原因,它还包括状态进程D
(不间断睡眠)。至少从 1999 年开始就是这样,我不知道为什么。
该标志现在很可能用于查找失控的进程。这就是您ps r
多次运行并且始终出现相同进程的地方。这不是一个明确的问题,但您可能想问为什么该进程始终在运行。
请记住,它是您运行时进程的正确状态ps
(更正确的是,当ps
检查进程状态时)。如果您ps
每 10 秒运行一次,并且除了您运行的那一刻之外,一个进程对 CPU 的影响达 9.99 秒ps
,就其而言,它不是一个正在运行的进程ps
。
这就像每小时看一眼窗外来检查邻居是否有访客一样。你可能会抓住某人,但机会很小。
几乎总是您不想运行ps
并选择运行状态。如果您想弄清楚什么占用了大部分 CPU,top
空闲状态打开(按 i)将显示您需要的内容。这种类型的选择询问“自上次刷新以来 CPU 使用率数据是否发生变化”?