如何将 ps 命令输出存储为 csv 格式?

5 linux shell

我正在制作一个流程监控应用程序。现在我的需要是

  1. 获取所有正在运行的进程的进程相关数据(pid、进程名称、cpu 使用情况、内存使用情况和虚拟内存使用情况)。

  2. 完成第一步后,我想将检索到的数据存储为csv格式。

我的代码部分是:

ps -e -o pid,lstart,%cpu,%mem,cmd >> output.csv
Run Code Online (Sandbox Code Playgroud)

但它仅将所有值存储在一个单元格中。意思是它不是用逗号分隔的。

输出.csv示例:

  PID                  STARTED %CPU %MEM CMD
    1 Mon Feb 25 00:00:01 2019  0.0  0.1 examplecommand1
    2 Mon Feb 25 00:00:01 2019  0.0  0.0 examplecommand2
                          (...)
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

小智 8

您可以尝试类似我编写的以下代码:

ps -e -o %p, -o lstart -o ,%C, -o %mem -o ,%c > output.csv

简要说明:

-o选项可以在命令中多次使用ps以指定格式。为了控制使用哪个分隔符,我们可以使用AIX 格式描述符。我们可以指定所需的分隔符,例如%p,。由于AIX 格式描述符并不适用于每条数据,而仅适用于某些数据(例如,在我们的例子中,没有for和 for 的AIX 格式描述符),因此我们在可用的AIX 格式描述符周围种植和来实现逗号分离。例如,该站点提供有关该命令的信息以供进一步阅读。 %memlstart%memlstartps

输出.csv示例:

  PID,                 STARTED,%CPU,%MEM,COMMAND
    1,Mon Feb 25 00:00:01 2019, 0.0, 0.1,examplecommand1
    2,Mon Feb 25 00:00:01 2019, 0.0, 0.0,examplecommand2
                           (...)
Run Code Online (Sandbox Code Playgroud)