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

相关推荐
xiaoxiangsiyan2 小时前
RHCE2026完整版全知识点清单
运维·网络·学习·自动化·rhce
风控PM说2 小时前
自动化风控策略生成:基于决策树的方法
运维·决策树·自动化
Titan20243 小时前
Linux网络基础知识
linux·服务器·网络·c++·学习
皮皮蟹虾饺3 小时前
NCCL 源码解析:通信器从出生到消亡的完整一生
linux·人工智能·ubuntu·语言模型·kubernetes
Java&Develop3 小时前
QuantDinger 宝塔 Linux 部署完整指南
linux·运维·状态模式
RisunJan4 小时前
Linux命令-tcpdump(网络数据包捕获)
linux·网络·tcpdump
头茬韭菜4 小时前
第 9 篇:「Fluss 运维实战」—— 部署、监控与故障排查
运维·fluss
Titan20244 小时前
Linux网络学习:套接字、UDP的封装与应用
linux·服务器·开发语言·网络·c++
.冰块.4 小时前
两套完整 Linux 建站实战:Wordpress 博客(LAMP)+ECShop 电商(LNMP)全套手册
linux·运维·项目实战·lnmp·lamp·电商平台·博客平台