Có thể nhìn thấy nhượng bộ chết?


13

Trong man psđó, nó nêu rõ các trạng thái khác nhau mà một quy trình có thể có trên Linux.

D    Uninterruptible sleep (usually IO)
R    Running or runnable (on run queue)
S    Interruptible sleep (waiting for an event to complete)
T    Stopped, either by a job control signal or because it is being traced.
W    paging (not valid since the 2.6.xx kernel)
X    dead (should never be seen)
Z    Defunct ("zombie") process, terminated but not reaped by its parent.

Ngay cả tho Xlà một trạng thái quá trình, nó không bao giờ nên được nhìn thấy. Nhưng điều đó có đúng không? Có một cách lý thuyết để xem đó là một trạng thái trên một quá trình? Hay là nó hoàn toàn không thể 100%?


2
Việc sử dụng nên và thực tế là nó trong trang người đàn ông ngụ ý rằng thực sự có thể nhìn thấy nó. Tôi không biết làm thế nào hoặc khi nào mặc dù.
terdon

Câu trả lời:


6

Tôi đã đi sâu vào nhân Linux, mà không biết về cách thức hoạt động của nó trong lõi bên trong của nó, hoặc bất kỳ kiến ​​thức C lớn nào. Vì vậy, hãy tử tế với lý thuyết này :)

Các DEADtrạng thái được định nghĩa https://github.com/torvalds/linux/blob/master/fs/proc/array.c#L141 và được sử dụng tại https://github.com/torvalds/linux/blob/master/fs /exec.c#L974 để chỉ đưa ra trạng thái trả về. Vì vậy, cách duy nhất có thể nhìn thấy là nếu bạn kiểm tra trạng thái quy trình trước khoảng https://github.com/torvalds/linux/blob/master/fs/exec.c#L986 (hoặc sau này ở bất cứ nơi nào chức năng này được gọi từ..).

Nếu bạn cố gắng giết một quá trình chết, nó sẽ được chăm sóc và bỏ qua tại https://github.com/torvalds/linux/blob/master/kernel/signal.c#L1363

Vì vậy, trên lý thuyết ... tôi nghĩ câu trả lời là có. X như một trạng thái có thể được nhìn thấy trong lý thuyết, nhưng có lẽ chưa bao giờ có trong đời thực ..

Vui lòng sửa lại cho tôi nếu / tôi sai .. Tôi không chắc về điều này ..


2
Tôi có thể thấy nó vớiuntil sleep 0.4 & perl -e '$p = shift; while (1) {open A, "</proc/$p/stat" or last; $_=<A>; print}' $! | grep X; do :; done
Stéphane Chazelas

Đây là quá trình (đầu ra của /proc/.../stat) trông như thế nào; 4603 (sleep) X 0 -1 -1 0 -1 4202508 0 0 0 0 0 0 0 0 20 0 0 0 175042279 0 0 0 0 0 0 0 0 0 0 0 0 18446744071579306375 0 0 17 0 0 0 0 0 0.. Câu hỏi đã được trả lời. X là có thể! Cảm ơn!
xeor

1

Đây là bằng chứng về một thứ mà chúng ta vừa gặp phải trên một hệ thống sống:

$ sudo ps axf -O wchan
31103 -      R ?        00:00:00 /bin/bash /usr/local/bin/monitorcron taskA
31104 exit   X ?        00:00:00  \_ [su]

Bạn có nhớ nếu quá trình đã biến mất vào lần tiếp theo bạn chạy pskhông?
Hitechcomputergeek
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.