为什么 ps 命令中 bash 进程的 TIME 是 00:00:00

为什么 ps 命令中 bash 进程的 TIME 是 00:00:00

运行该ps命令时,输出如下:

  PID TTY          TIME CMD
  494 pts/0    00:00:00 ps
29487 pts/0    00:00:00 bash
32617 pts/0    00:00:02 gedit

为什么是TIME 00:00:00bash根据极客对极客,解释如下:

它只是任何进程的总累计 CPU 使用时间,00:00:00 表示内核到目前为止还没有给出 CPU 时间。在上面的例子中,我们发现,对于 bash,没有给出 CPU 时间。

有人有更好的解释吗?

答案1

ps命令报告进程的 CPU 使用率. 如果你想获得这些信息毫秒,你可以看看这个答案的结尾。

ps将进程使用的总 CPU 时间截断为最接近的低秒数,因此您可以放心地假设您查找的进程(bash在您的例子中)已经使用了少于一 CPU 秒迄今为止。

这是正常的,因为bash不会进行任何数字运算而花费太多的 CPU 周期。bash只是从输入中读取命令并调用相关的可执行文件来执行命令请求的工作。

bash本身并不是一个“CPU 密集型”进程。但是,您可以bash通过运行以下bash命令、等待几秒钟并使用Ctrl+终止它来利用一些 CPU 时间C

while [[ true ]] ; do : ; done

此后,您可以再次检查bash运行所花费的 CPU 时间ps


我编写了一个简单的脚本来显示进程使用的总 CPU 时间以毫秒为单位。实际上,在大多数系统中,时钟每秒滴答 100 次,因此输出的准确性是几十毫秒内。您可以通过传递一个指定您感兴趣的进程的进程 ID 的参数来调用此脚本,例如它将494在您的问题中。

#!/bin/bash
usage="Usage: $(basename $0) pid"
case "$*" in
 ''|*[!0-9]*)
  echo "$usage" 1>&2
  exit 1
  ;;
 * )
  pid="$1"
  ;;
esac
read -r -a pinfo <<< $(cat "/proc/$pid/stat" 2>/dev/null)
if (( ${#pinfo[@]} == 0 )) ; then
  echo -e "No proccess with PID : $pid" >&2
  exit 2
fi
let clk_tck="$(getconf CLK_TCK)"
let utime="${pinfo[13]}"
let stime="${pinfo[14]}"
let cputime=(utime + stime)*1000/clk_tck
echo "PID : ${pinfo[0]}
Cmd : ${pinfo[1]}
CPU : $cputime msec"

相关内容