You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用通用Shell命令获取Linux和Mac进程的峰值内存?

跨Linux与macOS获取进程峰值内存的无依赖实现

问题根源在于Linux和macOS使用的time工具属于不同分支:Linux用的是GNU版本(/usr/bin/time),支持-f格式化参数;macOS用的是BSD shell内置版本,依赖TIMEFMT环境变量但输出格式有差异。可以通过系统分支判断实现跨平台兼容,无需额外安装依赖。

实现方案1:仅获取峰值内存数值

以下是一个可复用的shell函数,直接返回整数形式的进程峰值内存(单位KB):

get_peak_memory() {
    local cmd="$*"
    case "$(uname -s)" in
        Linux)
            # GNU time:直接输出峰值内存到stderr,转成整数
            /usr/bin/time -f "%M" $cmd 2>&1 >/dev/null | awk '{print int($0)}'
            ;;
        Darwin)
            # BSD time:设置TIMEFMT后过滤出纯数字行,去除前导空格转整数
            TIMEFMT='%M' time $cmd 2>&1 >/dev/null | grep -E '^[[:space:]]*[0-9]+$' | awk '{print int($0)}'
            ;;
        *)
            echo "Unsupported system" >&2
            return 1
            ;;
    esac
}

使用方式

运行你的进程并获取峰值内存:

peak_mem=$(get_peak_memory myProc)
echo "峰值内存:$peak_mem KB"

实现方案2:整合原有日志/输出逻辑

如果你需要保留原逻辑中的tee memory和日志追加操作,可以使用以下版本:

run_and_get_peak() {
    local log_file="$1"
    shift
    local cmd="$*"
    local peak_mem

    case "$(uname -s)" in
        Linux)
            # 保留进程stdout到memory文件和日志,捕获time的峰值输出
            peak_mem=$(/usr/bin/time -f "%M" $cmd 2>&1 > >(tee memory | tail -n1 >> "$log_file"))
            peak_mem=$(echo "$peak_mem" | awk '{print int($0)}')
            ;;
        Darwin)
            # BSD time:捕获所有输出,分离进程stdout和time的峰值数据
            local time_output=$(TIMEFMT='%M' time $cmd 2>&1 > >(tee memory | tail -n1 >> "$log_file"))
            peak_mem=$(echo "$time_output" | grep -E '^[[:space:]]*[0-9]+$' | awk '{print int($0)}')
            ;;
        *)
            echo "Unsupported system" >&2
            return 1
            ;;
    esac
    echo "$peak_mem"
}

使用方式

传入日志文件路径和你的进程命令:

peak=$(run_and_get_peak "$log" myProc)
echo "进程峰值内存:$peak KB"

关键细节说明

  • uname -s:通过内核名称识别系统,Linux返回Linux,macOS返回Darwin
  • Linux下必须使用/usr/bin/time(GNU版本),避免调用shell内置的time(不支持-f参数)
  • macOS下TIMEFMT='%M'会让内置time仅输出峰值内存,但输出带前导空格,需用grep过滤纯数字行后转整数

内容的提问来源于stack exchange,提问作者AC-93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:55:29