nproc 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于进程与系统命令族(见进程与系统命令族)。决定"我能并行跑几个"的基础数字。
nproc 打印当前进程可用的 CPU 逻辑核心数。它比 lscpu(见硬件族文档)轻量,专门给脚本取核数用。
一、基本用法
bash
nproc # 当前可用逻辑核数,如 8
nproc --all # 系统全部逻辑核(不受 cgroup 限制影响)
nproc --ignore=2 # 减 2 后的核数,适合"留两颗给系统"默认受 cgroup 限制(容器里可能小于宿主真实核数);
--all绕过限制看物理全部。--ignore=N留出 N 核,常用于"别把机器跑满"的保守并行。
二、结合负载判断繁忙
bash
# load average / nproc = 每核平均负载
# =1 满负荷,>1 排队,<1 有余量
uptime | awk -F'load average:' '{print $2}' # 取负载
nproc # 取核数配合 uptime 的负载(见uptime),
负载/nproc才是真实饱和度。这是判断"系统到底忙不忙"的正确算法,单个负载数字没意义。
三、实战:设定并行度
bash
make -j$(nproc) # 编译用全部核并行
tar -cf - . | pigz -p $(nproc) > out.tgz # 压缩并行数=核数
xargs -P$(nproc) ... # 并行处理(见 [xargs](/linux/cmd/xargs.md))并行工具(make -j、压缩、xargs -P)的线程/进程数通常设为
nproc。注意 IO 密集型任务(如大量小文件 gzip)核数拉满反而因 IO 争抢变慢,可留余量。
四、与 lscpu / cpuinfo 区别
bash
nproc # 只给一个数字(核数),脚本友好
lscpu # 详尽:核数、插槽、线程、NUMA(见硬件族)
grep -c processor /proc/cpuinfo # 等价取逻辑核数
nproc是"只要那个数字"的最简方式;lscpu给全量拓扑(NUMA、socket、thread);/proc/cpuinfo的 processor 行数也等于逻辑核。脚本里取数用 nproc 最干净。
一句话总结
nproc = 当前可用 CPU 逻辑核数:默认受 cgroup 限制(容器小于宿主)、--all 看物理全部、--ignore=N 留 N 核;配合 uptime 负载算 负载/nproc 才是真实饱和度(见uptime);并行任务(make -j、xargs -P、压缩)数常设为 nproc。比 lscpu 轻量、脚本取数更友好。