top 命令直到进程运行完毕

top 命令直到进程运行完毕

我正在运行一个进程,我想存储它的 CPU 使用率。

所以我使用了 top 命令

{ test_case.sh > out.log ; } && { sleep 2s ; x=`pidof test_case` ; top -p $x -d 5 -b > cpu.log ; }

但是 cpu.log 文件是空的,而 out.log 包含 test_case 的输出

我不知道为什么。

你能帮我获取 top 命令的输出直到该过程完成吗

答案1

{ ./can.sh > canny.log & x=$(pidof -s /bin/bash ./can.sh) ; echo > cpu.log ; } && { while test $x == $(pidof -s /bin/bash ./can.sh) ; do top -p $x -bn 1 >> cpu.log ; sleep 5s ; done ; }

can.sh 是我的流程。can.sh 的第一行是 sleep 1s,这是为了确保 $x 建立。

编辑... 看完这个之后,这个采用了你的设计并使其无错误地执行.... 但实际上它并没有达到你的预期... 你的 test.sh(我的 can.sh)是一个执行命令的脚本... 脚本不使用 CPU... 它们执行的命令将使用 CPU... 所以你不会看到这种方法反映这一点。 我将把它留在那里,以防你能弄清楚如何让 top 给你调用的命令的 CPU 使用率。

... pidstat 本来会更好...但仍然会出现同样的问题。我不会使用脚本来举例...只是一个命令。

:~$ pidstat 1 -e dd if=/dev/zero of=/home/thecarebears/pinecone.txt bs=1024 count=1000000
 
Linux 5.4.0-51-generic ()   10/30/2020  _x86_64_    (2 CPU)

07:51:54 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
07:51:55 PM  1000    237570    9.00   90.00    0.00    0.00   99.00     1  dd
07:51:56 PM  1000    237570    8.00   91.00    0.00    0.00   99.00     1  dd
07:51:57 PM  1000    237570    0.00   11.00    0.00    0.00   11.00     1  dd
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB, 977 MiB) copied, 3.81999 s, 268 MB/s

Average:     1000    237570    5.67   64.00    0.00    0.00   69.67     -  dd

显示 CPU 统计信息,在本例中每 1 秒显示一次,直到指定的命令完成...该命令是 dd(带有参数),但如果我在 can.sh 中运行 dd,pidstat 1 -e can.sh将显示 0% CPU,因为 dd 是脚本正在执行的命令...我不知道让脚本作为命令出现在操作系统中的魔力(如果它存在)...

因此,如果您有一个想要监控的命令,而不是脚本,那么这两者都可以起作用...如果您无法解决这个问题,那么您可能需要做更多的计算...除非其他人提供一些额外的知识。

相关内容