Якщо ми введемо, ps -ef
то ми отримаємо список процесів. Чому номери PID не є безперервними?
Якщо ми введемо, ps -ef
то ми отримаємо список процесів. Чому номери PID не є безперервними?
Відповіді:
На Ubuntu вони безперервні. В інших операційних системах це може відрізнятися.
Ядро виділяє PID в діапазоні (RESERVED_PIDS, PID_MAX_DEFAULT). Це робиться послідовно у кожному просторі імен (завдання в різних просторах імен можуть мати однакові ідентифікатори). У випадку, коли діапазон вичерпаний, присвоєння розсилки розгортається.
( /programming/3446727/how-does-linux-determine-the-next-pid )
Розум, хоча ...
Деякі теми про stackoverflow:
У коментарях є команда для перевірки призначення PID:
for i in {1..20}; do sh -c 'echo $$'; done
Зазвичай PID є безперервним, але деякий процес буде мертвим саме до моменту запуску команди ps -ef
.
Також деякі процеси можуть бути просто підпроцесом іншого процесу, який не показаний у ps -ef
команді. Щоб побачити деякий розширений результат і ви можете перевірити постійний 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