# инициализация
BEGIN { START=999 ; COUNT = 0 }
# Как только видим Tasks в начале строки, понимаем,
# что top выодит новую порцию данных.
# Первая строка с процессом находится на 6 строк дальше.
/^Tasks/ { START = NR + 6 }
# 7-я строка - это заголовок. Выведем для красоты.
NR == 7 { print }
# Наконец-то строка с нашим процессом. Посчитаем итерацию
# и выведем текущее состояние.
NR == START { COUNT++; print }
# Прошло 3 итерации, достаточно.
COUNT == 3 { exit }
像这样运行:
$ top -b -n 10 -d 1 | awk -f max-user.awk
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16235 cronfy 20 0 43216 3828 3196 R 12,5 0,1 0:00.02 top
3070 olenka 20 0 4640760 997152 39036 S 3,0 13,1 24:59.97 java
5099 olenka 20 0 859700 135380 70324 S 2,9 1,8 10:45.65 chrome
#!/usr/bin/env python
import time
import psutil
for process in psutil.process_iter(): process.cpu_percent() # ignore
time.sleep(1) # averaging interval in seconds
print(max(psutil.process_iter(), key=psutil.Process.cpu_percent).username())
这个问题很有趣。
当然,除非我理解正确,并且答案不会简化为简单的启动
(并且,如果有必要,使用键切换排序M)。
让我们先处理内存,
它更容易:
此命令将打印使用内存最多的用户的名称(在本例中,结果是
tomcat)。如果您需要更多详细信息,请添加列:-o user,vsize,cmd。按键:
ax- 显示所有进程。h- 不显示标题。-o user- 输出格式。--sort -vsize- 按占用内存降序排序(降序由-前面的符号指定vsize)。现在有趣的部分 - CPU
我想打个比方
ps --sort cpu。然而,男人说:这真的不是我们需要的,我们需要了解现在哪个进程加载最多。
团队
top呢?她有一个批处理模式,看起来,top -b -n 1 | head问题就解决了。然而,实践表明,这样的发布,top 显示的信息远非最准确的信息。例如,他可以将自己展示为最困难的过程。为了使数据更可靠,top 需要做一些工作。
解决方案来了。让我们运行 top 几次迭代,并从最后一个中取出最重的过程。让我们呼救吧
awk。脚本:
最大用户.awk
像这样运行:
在最后一行(不是第一行!)我们看到了最多的加载过程。您可以像这样获取用户名:
顶键:
-b- 非交互模式。-n 10- 迭代次数。你可以放很多,无论如何,执行都会中断awk。-d 1- 迭代之间的延迟。这是 Python 中的跨平台版本:
脚本:
cpu_percent(),以指示从哪个时间开始统计(第一次调用的返回值无意义)1- 每个进程平均 CPU 利用率的时间。适合您的需求。要工作,您需要安装一个
psutil依赖项,例如,在 Ubuntu 上:或者如果你不想接触系统,那么你可以只为当前用户输入:
请参阅如何在 Ubuntu 中的任何位置运行 Python 文件?