nproc to malutkie narzędzie z pakietu GNU coreutils, które wypluwa jedną liczbę: ile jednostek przetwarzających (rdzeni/wątków CPU) jest dostępnych dla bieżącego procesu. Brzmi banalnie, ale to ulubieniec skryptów: zamiast wpisywać na sztywno „użyj 8 wątków”, pytasz system, ile faktycznie ma do dyspozycji, i dynamicznie skalujesz make, kompilację, przetwarzanie obrazów czy kontener. Co ważne, domyślnie nproc pokazuje liczbę dostępnych rdzeni — z uwzględnieniem maski przypięcia CPU (affinity) i limitów cgroups — a nie wszystkich zainstalowanych. To często myli ludzi w kontenerach.
Składnia i najważniejsze opcje
Podstawowe wywołanie to po prostu nproc [opcje] — bez argumentów dostajesz gołą liczbę.
--all— pokazuje liczbę zainstalowanych procesorów, ignorując maskę affinity, cgroups i zmienne OpenMP. Przydatne, gdy chcesz znać „fizyczne” możliwości maszyny, a nie limit procesu.--ignore=N— odejmuje N jednostek od wyniku (np. żeby zostawić rdzeń dla systemu). Wynik nigdy nie spadnie poniżej 1.--help— krótka pomoc i lista opcji.--version— wersja narzędzia (czyli wersja coreutils).
Dodatkowo wynik bywa modyfikowany przez zmienne środowiskowe OpenMP: OMP_NUM_THREADS ustawia wartość zwracaną, a OMP_THREAD_LIMIT jej górny limit.
Przykłady użycia
nproc— wypisuje liczbę rdzeni dostępnych dla procesu, np.8. Najczęstsze użycie.nproc --all— pokazuje wszystkie zainstalowane rdzenie, nawet jeśli proces ma przypisaną tylko część.make -j"$(nproc)"— kompiluje, używając tylu zadań równoległych, ile masz rdzeni. Klasyk przyspieszający budowanie.make -j"$(nproc --ignore=2)"— to samo, ale zostawia 2 rdzenie wolne, żeby pecet nie zamarł podczas kompilacji.taskset -c 0,1 nproc— ograniczasz proces do rdzeni 0 i 1, anprocgrzecznie zwróci2, pokazując efekt maski affinity.
Częste błędy i pułapki
Największa pułapka to kontenery (Docker, Kubernetes). Jeśli ograniczysz kontenerowi CPU przez cgroups, nproc może i tak zwrócić liczbę wszystkich rdzeni hosta (zależnie od wersji coreutils i sposobu limitowania), przez co make -j"$(nproc)" odpali kilkadziesiąt wątków na limicie 2 rdzeni — i wszystko się zatka. W takich miejscach weryfikuj realny limit, np. odczytując pliki cgroup.
Drugi mit: nproc liczy wątki logiczne, a nie fizyczne rdzenie. Z Hyper-Threadingiem 4-rdzeniowy CPU pokaże 8. To nie błąd — po prostu pamiętaj o różnicy. Jeśli potrzebujesz topologii fizycznej, sięgnij po lscpu. I drobiazg: nproc to coreutils, więc na BSD/macOS go nie ma — tam użyj sysctl -n hw.ncpu.
Powiązane komendy: lscpu, /proc/cpuinfo (cat), getconf _NPROCESSORS_ONLN, taskset, sysctl, htop, free.