Linux命令-times(进程累计时间显示)

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 或专业的性能分析工具。

相关推荐
未济5 天前
linux 配置环境变量
linux
傲世仙尊5 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫5 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
_艾伦 耶格尔.5 天前
进程间通信
linux
AI职业加油站5 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
Liuqy-055 天前
Linux IO编程——静态库、动态库
linux
此冬歌咏5 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
彧azz5 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅5 天前
linux(8) 软硬链接
linux·运维·服务器
AIgorithmGEEK5 天前
[Linux]线程三部曲(上):一个执行流的诞生——从操作系统一路拆到 pthread_create
linux·线程·pid