Linux命令-times(进程累计时间显示)
times 是 Bash 内建命令,用于显示当前 Shell 及其所有子进程的累计用户态 CPU 时间和内核态 CPU 时间。它是一个轻量级的统计工具,适合在脚本结束时查看总体资源消耗。
快速参考
bash
times
times仅是 Bash 内建命令,没有独立的可执行文件。它统计的是当前 Shell 从启动到执行times时的累计时间,包括所有后台子进程。
基本用法
bash
# 直接执行
times
# 输出示例:
# 0m0.123s 0m0.045s
# 0m0.890s 0m0.234s
#
# 第一行: 当前 Shell 自身的 user/sys 时间
# 第二行: 所有子进程的 user/sys 时间累计
# 在脚本末尾使用
#!/bin/bash
# ... 大量操作 ...
times
在脚本中的使用
bash
#!/bin/bash
# 脚本执行时间统计
echo "脚本开始: $(date)"
# 模拟各种操作
sleep 1
echo "hello" > /tmp/test.txt
find /etc -maxdepth 2 -name "*.conf" > /tmp/confs.txt 2>/dev/null
echo ""
echo "=== 时间统计 ==="
times
echo ""
echo "脚本结束: $(date)"
bash
#!/bin/bash
# 编译任务时间统计
echo "开始编译..."
make -j$(nproc) 2>&1 | tail -5
echo ""
echo "=== Shell 自身 + 子进程累计时间 ==="
times
echo ""
# 对比: 外部 time 命令的输出
# { time make -j$(nproc); } 2>&1
与 time 命令的区别
bash
# times: 显示 Shell 和子进程的累计 CPU 时间
# - 不显示 real 时间(挂钟时间)
# - 只显示 user + sys
# - 是 Bash 内建
# time: 测量单个命令的执行时间
# - 显示 real/user/sys 三个值
# - 可以测量任意命令
# - 既是 Shell 内建也是外部命令
# 对比示例
echo "--- times 输出 ---"
times
echo "--- time 输出 ---"
time sleep 1
# 在长时间运行的脚本中
SECONDS=0 # Bash 内建计时器
# ... 大量操作 ...
echo "挂钟时间: $SECONDS 秒"
times # CPU 时间统计
多个子进程的时间统计
bash
#!/bin/bash
# 多子进程 CPU 时间统计
echo "启动多个后台任务..."
# 后台任务 1
(sleep 2; echo "任务1完成") & pid1=$!
# 后台任务 2
(sleep 1; echo "任务2完成") & pid2=$!
# 后台任务 3
(find /etc -name "*.conf" > /tmp/find_result.txt 2>/dev/null) & pid3=$!
# 等待所有后台任务完成
wait $pid1 $pid2 $pid3
echo ""
echo "所有任务完成"
echo ""
echo "=== CPU 时间统计 ==="
times
# 第二行的数值是所有子进程的 CPU 时间之和
# 包括已退出的后台进程
实战:脚本性能报告
bash
#!/bin/bash
# 带资源统计的部署脚本
LOG_FILE="/var/log/deploy_$(date +%Y%m%d).log"
log() {
echo "[$(date '+%H:%M:%S')] $*" | tee -a "$LOG_FILE"
}
log "=== 部署开始 ==="
log "主机: $(hostname)"
log "用户: $(whoami)"
# 步骤1
log "步骤1: 拉取代码"
git pull origin main 2>&1 | tail -1 | tee -a "$LOG_FILE"
# 步骤2
log "步骤2: 安装依赖"
npm install --silent 2>&1 | tail -1 | tee -a "$LOG_FILE"
# 步骤3
log "步骤3: 构建"
make -j$(nproc) 2>&1 | tail -1 | tee -a "$LOG_FILE"
# 步骤4
log "步骤4: 重启服务"
sudo systemctl restart myapp 2>&1 | tee -a "$LOG_FILE"
log "=== 部署完成 ==="
echo ""
echo "=== 资源统计 ==="
echo "挂钟时间: $SECONDS 秒" | tee -a "$LOG_FILE"
times | tee -a "$LOG_FILE"
输出格式说明
bash
# times 输出格式:
# mMs Ns mMs Ns
#
# 第一行:
# mMs - Shell 自身用户态时间
# Ns - Shell 自身内核态时间
# 第二行:
# mMs - 所有子进程用户态时间累计
# Ns - 所有子进程内核态时间累计
#
# m = 分钟, s = 秒, N = 纳秒(实际显示为小数)
# 注意事项:
# - times 只统计当前 Shell 及其直接/间接子进程
# - 如果在子 Shell 中执行 times,只统计该子 Shell 的子进程
# - times 不统计 grandchild(孙进程)在父 Shell 已退出后的时间
times是一个简单但有用的 Bash 内建命令,适合在脚本结束时快速查看 CPU 资源消耗概况。对于更详细的性能分析,应使用/usr/bin/time -v或专业的性能分析工具。