Может ли / 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к информации, которую он отображает.
Стивен Китт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.