macOS 上 Shell 并发执行任务推荐三种方式:① & + wait 适合简单少量任务;② xargs -P 利用系统自带工具控并发数;③ GNU Parallel 提供高级功能,需 brew 安装。均需注意日志记录与状态检查以确保可靠性。
macos 上用 shell 脚本并发执行任务,核心目标是:不卡死系统、能控数量、结果可查。它和 linux 基本一致,但要注意 macos 默认 shell 是 zsh(不是 bash),且部分 gnu 工具(如 parallel)需额外安装。
用 & + wait 控制基础并发
最轻量、无需额外依赖的方式。适合 5 个以内任务,逻辑简单时直接上手:
- 每条命令末尾加
&,让它后台运行 - 用
wait确保脚本等到所有后台任务结束才继续 - 避免无节制启动——比如 100 个任务全扔后台,会拖慢 macOS 图形界面甚至触发“进程限制”警告
示例(并发运行 3 个耗时任务):
#!/bin/zsh<br>for i in {1..3}; do<br> sleep $((RANDOM % 3 + 1)) && echo "task $i done" > "log$i.txt"<br>done<br>wait<br>echo "全部完成"
用 xargs -P 限并发数(推荐)
macOS 自带 xargs,支持 -P 参数控制并行数,比纯 & 更稳:
-
-P N表示最多同时运行 N 个进程 -
-n 1表示每次传一个参数给命令 - 适合处理列表型任务,比如批量 ping、上传文件、转换图片
示例(并发检测 5 台主机连通性,最多 3 个同时跑):
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
printf "%s\n" host1 host2 host3 host4 host5 | xargs -n 1 -P 3 sh -c 'ping -c 1 -t 2 "$0" > /dev/null && echo "$0: OK" || echo "$0: FAIL"'
装 GNU Parallel 提升灵活性
macOS 没预装 parallel,但通过 Homebrew 一行就能装好:brew install parallel。装完后能力明显增强:
- 自动负载感知,支持进度条、失败重试、结果合并
- 语法更清晰,比如
seq 1 10 | parallel -j 4 "sleep {}; echo done {}" - 特别适合复杂命令、带空格参数、或需要按顺序收集输出的场景
注意:首次运行可能提示 WARNING: No --will-cite,加 --will-cite 即可(这是作者要求的引用声明,非错误)。
记录日志与判断成败
并发下不能只看终端输出——任务在后台跑,出错容易被忽略。建议每项任务单独写日志,并标记退出状态:
- 用
command > log.txt 2>&1; echo "status: $?" >> log.txt - 最后统一扫描所有日志,提取
status: 0或非零值做汇总 - macOS 的
grep -oP支持 Perl 正则,提取状态码很方便
这样即使某个任务失败,也能定位到具体哪个 log 文件、哪一行出问题,不用重跑全部。

















