提供CPU信息的shell脚本

提供CPU信息的shell脚本

有人可以帮我编写一个 shell 脚本来给我以下信息:

  • 进程的状态;
  • 进程在CPU中经过的时间;
  • 使用的总内存(以KB为单位);
  • 打开文件描述符的数量;
  • 启动进程的命令行; - 该进程启动的进程的PID。

它应该是 JSON 格式,并且必须如下所示:

{
    "pid" : 2714,
    "status" : "S",
    "usageCPU" : 1233,
    "usageMemoire" : 404,
    "numFD" : 12,
    "commande line" : "/bin/bash",
    "task" :
        [
            { "pid" : 2714 },
            { "pid" : 4230 }
] }

还有一件小事:

输入参数:

您的程序将采用以下输入参数: - 我们想要的信息的进程的 pid。总之,启动您的程序将需要命令:./your_program 2714

错误格式

如果因为 pid 号不好而找不到必要的信息,那么它将返回以下字符串:E_PID_NOT_FOUND

PS我是一名数学专家,但我必须写这个,而且我不知道如何做到这一点。

答案1

大致如下:

name_of_process=$1

ps aux\
 | grep $name_of_process\
 | grep -v "grep"\
 | awk '{print \"{\
     \"pid\" : $2,\
     \"status\" : $8,\
     \"usageCPU\" : $10,\
     \"usageMemoire\" : $4,\
     \"numFD\" : $some_field_num,\
     \"commandline\" : split($NF)[0]\
     \":[{ \"pid\" : $2},{\"pid\" : $some_field_num_too }]}'

因此,我有效地调用ps(带有aux标志),它给出了所有进程及其数据的列表,将其输出通过管道传输到grep仅获取包含我们进程名称的行,grep再次将其输出通过管道传输到其中,而不是寻找短语“grep”(相信我,这是必要的),然后最后将数据(现在只是一行)传输到 awk 中。

然后 awk 按列分割数据(我认为默认分隔符是 TAB),在 awk 中 $number 语法对应于所给数据的一列。

对于 numFD 和 ppid ,我不知道这些列是什么,因为默认情况下它们不会打印,所以也许检查ps(除了aux)的额外标志,看看有哪些可用选项。

相关内容