/ Proc / PID vẫn tồn tại khi PID không chạy?


11

có thể là một thư mục giống như /proc/4587tồn tại mặc dù không có quá trình có PID 4587?


1
Bạn có tự hỏi nếu kiểm tra / Proc / N là một cách an toàn / đáng tin cậy để xem liệu PID N có đang chạy không?
Andy Lester

Tôi đã tự hỏi nếu về mặt lý thuyết có thể có dư lượng trong / Proc sau khi quá trình không còn nữa.
David Đại

Câu trả lời:


25

Nếu /procchỉ là thú proccưỡi (và không ai chơi trò bịp với lớp phủ), thì không, thư mục dựa trên pid chỉ tồn tại miễn là quá trình tương ứng tồn tại ở một số trạng thái (bao gồm cả zombie). Trong thực tế, ngay trước khi trả về một mục nhập thư mục cho id quá trình, kernel xác nhận lại sự tồn tại của quy trình - vì vậy ngay khi một mục nhập thư mục được trả về, quy trình tương ứng vẫn còn đó. Truy cập một thư mục cũng bắt đầu bằng cách tra cứu quá trình tương ứng. (Nếu số dòng thay đổi, hãy tìm proc_pident_instantiateproc_pident_lookup.)

Bạn có thể gặp phải các vấn đề do liệt kê /procvà sử dụng kết quả sau đó (thậm chí vài micrô giây sau): một quy trình có thể được chạy khi bạn liệt kê /procvà dừng trước khi bạn hành động theo kết quả.


3
Thế còn các quá trình thực hiện xong nhưng wait()chưa được gọi cho chúng thì sao?
el.pescado

2
Điểm hay @ el.pescado, kiểm tra nhanh cho thấy các quá trình zombie vẫn có thư mục của họ. Tôi sẽ cập nhật câu trả lời của tôi, cảm ơn!
Stephen Kitt

Về cơ bản, nếu pshiển thị quá trình, /procthư mục của nó sẽ tồn tại.
Barmar

Trên thực tế, @Barmar, phải thực hiện: pstruy cập /procđể tìm thông tin mà nó hiển thị.
Stephen Kitt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.