为什么`nproc` 显示少于`nproc --all`?

ALZ*_*ALZ 6 cpu centos qemu

这是nprocvsnproc --all和互联网上其他命令的输出。我仍然不明白为什么。它是一个带有 CentOS 6.5 的 QEMU\KVM VM,在其他 CentOS 6.5 上运行。

以下是一些其他命令的输出:

[root@h1-nms ~]# nproc
1
[root@h1-nms ~]# nproc --all
3
[root@h1-nms ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                3
On-line CPU(s) list:   0-2
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             3
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 13
Stepping:              3
CPU MHz:               2194.710
BogoMIPS:              4389.42
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0-2
[root@h1-nms ~]# getconf _NPROCESSORS_ONLN
3
[root@h1-nms ~]# cat /proc/$$/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            10485760             unlimited            bytes
Max core file size        unlimited            unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             32000                32000                processes
Max open files            64000                64000                files
Max locked memory         65536000             65536000             bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       191509               191509               signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
[root@h1-nms ~]# grep "" /sys/devices/system/cpu/cpu*/online
/sys/devices/system/cpu/cpu1/online:1
/sys/devices/system/cpu/cpu2/online:1
[root@h1-nms ~]# uname -a
Linux h1-nms 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@h1-nms ~]# cat /etc/*-release
CentOS release 6.5 (Final)
CentOS release 6.5 (Final)
CentOS release 6.5 (Final)
[root@h1-nms ~]#
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 5

Kusalananda回答所示nproc区分当前进程可用的 CPU 数量和 CPU 总数。

在 Linux 系统上,当不涉及 OpenMP 时,当前进程可用的 CPU 由进程的关联掩码决定。要查看,请运行taskset

taskset -p $$
Run Code Online (Sandbox Code Playgroud)

schedtool

schedtool $$
Run Code Online (Sandbox Code Playgroud)

(tasksetutil-linux包的一部分,应该默认安装;schedtool是它自己的包,如果你想使用它可能需要安装。)

在您的情况下,这应该表明您的外壳仅限于单个处理器,这就是nproc输出1.