按流程数量排名最高的用户且最活跃

时间:2018-05-18 04:19:24

标签: linux shell

if [ -d $1 ] && [ $#2 -gt 0 ]; then
    find $1 ps aux | awk '{ print $1 }' | sed '1 d' | sort | uniq | while read line true; do  #do forever
                                                                        who $line | sort $2   #show loggerd-in users, sorted alphabetically
                                                                        sleep 10              #wait 10 seconds
                                                                    done                      #carry on 
else
     echo "The parameter is invalid"
    exit 1
fi

问题 - 编写一个shell脚本,该脚本每10秒为一个已排序的列表(在文件中)提供主动登录的用户,并提供他们拥有的进程数。每分钟,相同的脚本将按字母顺序在屏幕上打印前10个用户及其组的列表,a)在过去20秒内拥有最多进程,b)从脚本开始就拥有最活跃的进程。应在命令行中提供秒数(见10)和用户数量(见20)作为参数

这就是我现在所拥有的,我不知道一切是否会奏​​效,但我正在努力让一切都与循环一起工作。

1 个答案:

答案 0 :(得分:3)

您可以通过研究whosleepwhilesort 开始。然后,一旦你尝试了某些东西,,你可能会回来问题,但它可能是错误的。这并不意味着批评,只是帮助将来发布更多可接受的问题。

对于它的价值,你的代码可能会对此有所改变:

#!/usr/bin/env bash

while true ; do    # do forever
    who | sort     # show logged-in users, sorted
    sleep 10       # wait a bit
done               # carry on

你显然需要根据更具体的要求调整它,但是,因为你只是要求开始,就是这样。

您的一些更复杂的要求可能需要who以外的工具,并且可能还需要awk进行文本处理。你必须研究这一点,因为它毕竟是你的任务。