Làm thế nào 'bị kẹt' (trong kết quả của 'top') liên quan đến 'không phản hồi' (trong Trình giám sát hoạt động), 'quay' hoặc 'treo'?


17

Trong kết quả của topcác lệnh, đôi khi tôi thấy bị mắc kẹt .

Trang hướng dẫn sử dụng OS X hàng đầu (1) của Apple không giải thích cách sử dụng từ này.

Làm thế nào, nếu tất cả, bị mắc kẹt liên quan đến sau đây?

  1. không phản hồi - có thể được nhìn thấy trong Trình giám sát hoạt động, trong cuộc đối thoại Force Quit Application của loginwindow, v.v.
  2. .hang tập tin - có thể có mặt tại /Library/Logs/DiagnosticReports
  3. .spin tập tin - có thể có mặt tại /Library/Logs/DiagnosticReports

Có một câu trả lời được chấp nhận cho điểm đầu tiên. Câu trả lời liên quan đến điểm 2 và 3 sẽ được đánh giá cao.

Câu trả lời:


15

Thường không có mối tương quan giữa một quá trình bị mắc kẹttop và một ứng dụng không phản hồi:

  • bị kẹt có nghĩa là quá trình hiện không thể gián đoạn, thường là trường hợp nếu quá trình đang chờ một khối dữ liệu mạng hoặc ổ đĩa được đọc (hoặc các công cụ cấp thấp tương tự). Về mặt kỹ thuật, quá trình này đang thực thi trong không gian kernel (hay còn gọi là hạt nhân Unix) và không thể bị gián đoạn (vì vậy ngay cả kill -9sẽ không có bất kỳ tác động nào). Thông thường các trạng thái bị kẹt này chỉ kéo dài một phần nghìn giây (như bạn có thể thấy topvì số lượng quá trình bị kẹt thay đổi theo mỗi chu kỳ hiển thị).
  • các ứng dụng không phản hồi có thể quá bận để trả lời bất kỳ sự kiện nào mà OS X ném vào chúng.

Tôi thấy một tình huống trong đó một quy trình bị kẹt tương ứng với một ứng dụng không phản hồi: Một quy trình có thể bị kẹt trong một thời gian rất dài, có thể bị kẹt vô tận, mà không có khả năng giết chết nó. Đây thường là kết quả của một số lỗi lập trình, ví dụ như ngắt kết nối không chính xác khỏi thiết bị được nối mạng sau đó kernel tiếp tục cố gắng đọc từ nó. Trong những trường hợp như thế này, ngay cả việc chấm dứt cưỡng bức cũng sẽ không loại bỏ được quy trình.


Cảm ơn - nếu bị kẹt đồng nghĩa với không bị gián đoạn , thì tôi quen với trạng thái đó. uninterruptiblethường thấy khi tôi khóa Control-T ( SIGINFO ) trong khi chạy fsck_hfstừ dòng lệnh. Thông tin thêm về SIGINFOtại của Apple termios (4) OS X Hướng dẫn sử dụng trang .
Graham Perrin

Liên quan đến câu trả lời này, một câu hỏi trong Stack Overflow có thể được quan tâm: Làm thế nào để xác định không đáp ứng quy trình theo chương trình .
Graham Perrin

2
Tôi đã xem xét mã nguồn hàng đầu: không bị gián đoạn giống như bị mắc kẹt.
nohillside

Gotcha - điểm nổi bật từ libtop.c trong mã nguồn mở cho Mac OS X 10.7.4.
Graham Perrin

1

Trạng thái xử lý U, TH_STATE_UNINTERRUPTIBLE và trạng thái xử lý Linux D

Một số người khác đã thu hút sự chú ý của MacOS hàng đầu: nelsonslog

Mạnh  TH_STATE_UNINTERRUPTIBLE, mà tôi tin là những gì psbáo cáo như là quá trình nhà nước. Tôi đoán đây là thứ mà Linux gọi là DẠNG cho Thiết bị Wait Wait. Trong trường hợp đó, trong hầu hết các trường hợp, quy trình đều ổn, nó đang chờ một số I / O hoàn thành. Giáo dục

Các trang người đàn ông Ubuntu cho ps khẳng định một mã quá trình nhà nước -

D    Uninterruptible sleep (usually IO)

- không có đề cập khác về không bị gián đoạn .

Trong tài liệu tham khảo chéo hạt nhân FreeBSD / Linux Linux:

Tôi tìm thấy một cuộc thảo luận năm 2002 Câu trả lời Gang 83: Làm thế nào để giết một quá trình trong trạng thái ngủ không bị gián đoạn? ( điểm nổi bật ) phù hợp độc đáo với các quan sát được thực hiện bởi @patrix.

Cuối cùng nhưng không kém, một 2004 bài [X-Unix] PS và Processes Stuck ( nổi bật ) nhắc đến WindowServer , mà phù hợp độc đáo với câu hỏi -related đã thúc đẩy tôi để đăng câu hỏi ở đây:

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.