Может ли / proc / PID существовать, когда PID не работает?

11

Возможно ли, что такая папка /proc/4587существует, хотя нет процесса с PID 4587?

Дэвид Дай
источник
1
Вы задаетесь вопросом, является ли проверка / proc / N безопасным / надежным способом проверки работы PID N?
Энди Лестер
Мне было интересно, если теоретически может быть остаток в / proc после завершения процесса.
Дэвид Дай

Ответы:

25

Если /procиспользуется только procмонтирование (и никто не разыгрывает трюки с оверлеями), нет, папка на основе pid существует только до тех пор, пока соответствующий процесс существует в каком-то состоянии (в том числе в виде зомби). Фактически, непосредственно перед возвратом записи каталога для идентификатора процесса, ядро повторно проверяет существование процесса - поэтому в момент возврата записи каталога соответствующий процесс все еще существует. Доступ к каталогу также начинается с поиска соответствующего процесса. (Если номера строк изменяются, ищите proc_pident_instantiateи proc_pident_lookup.)

Вы можете столкнуться с проблемами, вызванными перечислением /procи использованием результатов позже (даже спустя несколько микросекунд): процесс может выполняться, когда вы выводите список /proc, и останавливаться, прежде чем действовать на результаты.

Стивен Китт
источник
3
Как насчет процессов, которые завершили выполнение, но wait()не были вызваны на них?
el.pescado
2
Хороший вопрос @ el.pescado, быстрая проверка показывает, что процессы зомби все еще имеют свой каталог. Я обновлю свой ответ, спасибо!
Стивен Китт
В принципе, если psпоказывает процесс, его /procкаталог должен существовать.
Бармар
@ Barmar «должен» на самом деле: psдоступ /procк информации, которую он отображает.
Стивен Китт