Dlaczego wartości PID nie są ciągłe?


Odpowiedzi:


16

W Ubuntu są one ciągłe. W innych systemach operacyjnych może się różnić.

Jądro przydziela PID w zakresie (RESERVED_PIDS, PID_MAX_DEFAULT). Robi to sekwencyjnie w każdej przestrzeni nazw (zadania w różnych przestrzeniach nazw mogą mieć takie same identyfikatory). W przypadku wyczerpania zasięgu przypisanie pid otacza się.

( /programming/3446727/how-does-linux-determine-the-next-pid )

Pamiętaj jednak ...

  • Planowanie jądra może rozwidlać proces, więc może się wydawać, że pomija liczby.
  • PID zniknie po zakończeniu tego zadania.
  • PID nie są ponownie używane, dopóki nie zostanie osiągnięty PID_MAX_DEFAULT.
  • Zastrzeżony PID jest pomijany.

Niektóre tematy dotyczące przepływu stosu:

W komentarzach znajduje się polecenie przetestowania przypisania PID:

for i in {1..20}; do sh -c 'echo $$'; done

„Planowanie jądra może rozwidlać proces, więc może się wydawać, że pomija liczby.” - jądro może utworzyć proces, jednocześnie określając, który proces ma zostać uruchomiony? To wydaje się dziwne.
user253751,

Harmonogram często rozdziela proces. Prawdopodobnie ten bit: lxr.free-electrons.com/source/kernel/pid.c#L125, który to określa :)
Rinzwind

8

Brakujące między nimi identyfikatory procesów są już martwe, a ich PID zostaną ponownie wykorzystane przez jądro w późniejszych procesach.

Martwe procesy nie będą wyświetlane w tabeli procesów (z wyjątkiem zombie), dlatego ps -efich nie pokażą.


3

Zwykle PID jest ciągły, ale niektóre procesy zostaną przerwane do momentu uruchomienia polecenia ps -ef.

Również niektóre procesy mogą być tylko podprocesami innego procesu, który nie jest pokazany w ps -efpoleceniu. Aby zobaczyć rozszerzony wynik i sprawdzić ciągły PID, użyjpstree

pstree -p

Przykładowe dane wyjściowe:

   ├─teamviewerd(3468)─┬─{teamviewerd}(3474)
│                   ├─{teamviewerd}(3475)
│                   ├─{teamviewerd}(3476)
│                   ├─{teamviewerd}(3477)
│                   ├─{teamviewerd}(3478)

podczas gdy po uruchomieniu ps -efzobaczysz tylko proces nadrzędny.

$ ps -ef | grep teamviewerd
root      3468     1  0 Jul15 ?        00:07:38 /opt/teamviewer9/tv_bin/teamviewerd -f

2

Są ciągłe. PID są przypisywane w kolejności sekwencyjnej, aż do osiągnięcia maksymalnego limitu. Po tym limicie rozpocznie się od nowa od zera.

Po prostu brakujące PID ps -efsą martwe. Zauważ, że ps -efzawiera listę tylko uruchomionych procesów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.