如何使用 Bash 脚本监控 macOS 系统的 CPU 占用情况

在 macOS 系统中,了解各个进程的 CPU 占用情况 是一种重要的性能优化手段。对于开发者和系统管理员来说,时刻了解哪些应用占用了大量资源,可以帮助解决性能瓶颈。本篇文章将带你通过一个简单的 Bash 脚本,定期记录并保存系统中最消耗 CPU 资源的进程,便于后期分析和优化。

1. 脚本概述

我们将通过一个简单的 Bash 脚本,定期获取系统中各个进程的 CPU 占用情况,并将输出写入指定的日志文件。脚本运行时,会自动收集数据并将其存储在 /日志路径/cpu_usage_log.txt 文件中。

2. 脚本内容

#!/bin/bash

log_file="/日志路径/cpu_usage_log.txt"

echo "=== CPU USAGE LOG STARTED AT $(date) ===" >> "$log_file"

while true; do
  echo "=== $(date) ===" >> "$log_file"
  # macOS 用 ps + sort
  ps -arcwwwxo pid,%cpu,command | head -n 1 >> "$log_file"   # 表头
  ps -arcwwwxo pid,%cpu,command | tail -n +2 | sort -k 2 -nr | head -n 10 >> "$log_file"
  sleep 1
done

3. 脚本解释

3.1 定义日志文件路径

log_file="/日志路径/cpu_usage_log.txt"

在这行代码中,我们指定了日志文件的路径。你可以根据需要修改这个路径,让日志文件保存到你希望的位置。

3.2 写入日志文件头部

echo "=== CPU USAGE LOG STARTED AT $(date) ===" >> "$log_file"

脚本开始时,会在日志文件中记录当前的日期和时间,标识日志的开始。

3.3 监控进程的 CPU 使用情况

ps -arcwwwxo pid,%cpu,command | head -n 1 >> "$log_file"   # 表头
ps -arcwwwxo pid,%cpu,command | tail -n +2 | sort -k 2 -nr | head -n 10 >> "$log_file"
  • ps -arcwwwxo pid,%cpu,command:获取所有进程的 PID、CPU 占用率、命令名
  • head -n 1:输出表头(字段名称),并写入日志。
  • tail -n +2:跳过表头,获取进程信息。
  • sort -k 2 -nr:按 CPU 占用率 从高到低排序。
  • head -n 10:只显示前 10 个最消耗 CPU 的进程。

3.4 每隔 1 秒获取一次数据

sleep 1

脚本将会每秒钟获取一次进程的 CPU 占用情况,并将其记录到日志中。你可以根据需要调整间隔时间,例如调整为 sleep 10 以每 10 秒记录一次数据。

3.5 无限循环监控

while true; do
  ...
done

脚本会不断地循环执行,直到你手动终止它。它会持续获取 CPU 占用情况并将结果追加到日志文件中。

4. 如何使用该脚本

4.1 保存脚本

将上述脚本内容保存为一个名为 cpu_usage_monitor.sh 的文件。你可以通过文本编辑器(如 Visual Studio Code 或 Sublime Text)来创建并保存该文件。

4.2 添加执行权限

为了能够执行该脚本,你需要为它添加执行权限。在终端中运行以下命令:

chmod +x /path/to/cpu_usage_monitor.sh

确保脚本路径正确,并且文件具有可执行权限。

4.3 运行脚本

在终端中运行脚本:

./cpu_usage_monitor.sh

如果你希望在后台运行该脚本,可以使用 nohup 命令:

nohup ./cpu_usage_monitor.sh &

这样脚本会在后台持续运行,输出结果将保存在 nohup.out 文件中。

4.4 停止脚本

要停止脚本的执行,可以通过 Ctrl + C 来中断脚本,或者在终端中找到该进程并结束它:

ps aux | grep cpu_usage_monitor.sh
kill <PID>

其中 <PID> 是脚本进程的 ID。

5. 查看日志

脚本会将每秒钟获取的 CPU 占用情况写入到指定的日志文件中。日志文件的内容格式如下:

=== CPU USAGE LOG STARTED AT Thu Jul 9 17:05:33 UTC 2025 ===
=== Thu Jul 9 17:05:33 UTC 2025 ===
  PID %CPU COMMAND
  123 25.5 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
  456 10.1 /Applications/Visual Studio Code.app/Contents/MacOS/Electron
  ...
=== Thu Jul 9 17:05:34 UTC 2025 ===
  PID %CPU COMMAND
  123 24.0 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
  789 9.5 /Applications/Safari.app/Contents/MacOS/Safari
  ...

每次记录的内容包括:

  • 时间戳:每次记录的日期和时间。
  • PID:进程 ID。
  • %CPU:进程占用的 CPU 百分比。
  • COMMAND:正在执行的命令(即应用名称)。

6. 脚本扩展

6.1 修改时间间隔

如果你希望每隔更长时间获取一次数据,可以修改 sleep 命令的参数,例如每 10 秒记录一次:

sleep 10

6.2 修改记录的进程数

你可以根据需要调整脚本记录的进程数量。例如,如果你希望查看前 5 个最占 CPU 的进程,只需修改脚本中的 head -n 10head -n 5

6.3 仅记录特定进程

如果你只关心某些特定进程(例如 Chrome 或 VS Code),你可以使用 grep 来筛选特定的进程:

ps -arcwwwxo pid,%cpu,command | grep "Chrome" | sort -k 2 -nr | head -n 10 >> "$log_file"

7. 总结

通过上述 Bash 脚本,你可以轻松地监控和记录 macOS 系统中的 CPU 占用情况,帮助你找到哪些进程占用了过多的系统资源,从而进行优化或调整。此脚本可以根据需要进行扩展,满足不同的监控需求。