Почему значения PID не являются непрерывными?

Если мы наберем ps -ef, мы получим список процессов. Почему числа PID не являются непрерывными?

1
задан 23 July 2015 в 11:23

3 ответа

Идентификаторы процессов, отсутствующие между ними, уже мертвы, и их PID будут повторно использоваться ядром в последующих процессах.

Мертвые процессы не будут отображаться в таблице процессов (за исключением зомби), поэтому ps -ef не покажет их.

8
ответ дан 23 May 2018 в 18:51

Обычно PID является непрерывным, но какой-то процесс будет мертв только к моменту запуска команды ps -ef.

Также некоторые процессы могут быть просто подпроцессом другого процесса, который не показан в [ f5]. Чтобы увидеть расширенный результат, и вы можете проверить непрерывный PID, используйте pstree

pstree -p

Пример вывода:

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

, а если вы запустите ps -ef, вы просто увидите родительский процесс.

$ ps -ef | grep teamviewerd
root      3468     1  0 Jul15 ?        00:07:38 /opt/teamviewer9/tv_bin/teamviewerd -f
3
ответ дан 23 May 2018 в 18:51

Они непрерывны. PID назначаются последовательно, пока не будет достигнут максимальный предел. После этого предела он начнет снова с нуля.

Так просто, что недостающие PID в ps -ef имеют мертвые процессы. Обратите внимание, что в ps -ef перечислены только запущенные процессы.

2
ответ дан 23 May 2018 в 18:51

Другие вопросы по тегам:

Похожие вопросы: