Чи може / proc / PID все ще існувати, коли PID не працює?


11

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


1
Вам цікаво, чи перевірка на / proc / N - це безпечний / надійний спосіб дізнатися, чи працює PID N?
Енді Лестер

Мені було цікаво, чи теоретично може бути залишок в / proc після того, як процес піде.
Девід Дай

Відповіді:


25

Якщо /procє лише procкріплення (і ніхто не грає в хитрощі з накладками), ні, папка на основі підключення існує лише до тих пір, поки відповідний процес існує в якомусь стані (в тому числі як зомбі). Насправді, перед тим, як повернути запис каталогу для ідентифікатора процесу, ядро повторно підтверджує існування процесу - тому в даний момент повернення запису в каталог, відповідний процес все ще існує. Доступ до каталогу також починається з пошуку відповідного процесу. (Якщо номери рядків змінюються, знайдіть 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.