Nó không nhất thiết là một dấu hiệu xấu, nhưng hãy để tôi trả lời câu hỏi cuối cùng của bạn trước:
điều đó có chính xác?
Trong top
mã nguồn (từ http://www.opensource.apple.com/release/mac-os-x-1082/ ) trạng thái bị kẹt được gọi là định danh LIBTOP_STATE_STUCK
(từ libtop.c
):
libtop_state_str(uint32_t state)
{
const char *strings[] = {
"zombie",
#define LIBTOP_STATE_ZOMBIE 0
"running",
#define LIBTOP_STATE_RUN 1
"stuck",
#define LIBTOP_STATE_STUCK 2
"sleeping",
#define LIBTOP_STATE_SLEEP 3
"idle",
#define LIBTOP_STATE_IDLE 4
"stopped",
#define LIBTOP_STATE_STOP 5
"halted",
#define LIBTOP_STATE_HALT 6
"unknown"
#define LIBTOP_STATE_UNKNOWN 7
};
(...)
}
Sau đó trong cùng một tệp, LIBTOP_STATE_STUCK
được ánh xạ tới trạng thái kernel TH_STATE_UNINTERRUPTIBLE
:
/* Translate a mach state to a state in the state breakdown array. */
static int
libtop_p_mach_state_order(int state, long sleeptime)
{
switch (state) {
case TH_STATE_RUNNING:
return LIBTOP_STATE_RUN;
case TH_STATE_UNINTERRUPTIBLE:
return LIBTOP_STATE_STUCK;
(...)
}
Vì vậy, một quá trình ở trạng thái bị kẹt có nghĩa là tiến trình / luồng đang ở trạng thái chờ không bị gián đoạn , đó là cách TH_STATE_UNINTERRUPTIBLE
được định nghĩa trong cấu trúc kernel thread_basic_info
(xem http://web.mit.edu/darwin/src/modules/xnu/osfmk/ man / thread_basic_info.html ):
struct thread_basic_info
{
(...)
integer_t run_state;
(...)
};
ở đâu run_state
:
run_state: Trạng thái chạy của luồng. Các giá trị có thể là:
(...)
- TH_STATE_UNINTERRUPTIBLE: Chuỗi đang ở trạng thái chờ không bị gián đoạn.
(...)
Điều này thường được gây ra bởi một quá trình chờ vào I / O, nghĩa là quá trình đã yêu cầu đọc hoặc ghi vào / từ đĩa hoặc mạng và chờ cuộc gọi hệ thống trở lại (xem http://en.wikipedia.org / wiki / Sleep_% 28operating_system% 29 # Uninterruptible_s ngủ hoặc http://www.novell.com/support/kb/doc.php?id=7002725 để biết thêm thông tin).
(Khi không sử dụng các tùy chọn BSD, như thường thấy trong Linux, ps
hiển thị giấc ngủ không bị gián đoạn ở trạng thái D. )
Nó là một phần của vòng đời bình thường của quá trình?
Vâng, nó là. Điều không bình thường là một quá trình ở trong trạng thái này trong một thời gian dài. Đó là một dấu hiệu xấu.
Tại sao quá trình này nói riêng?
Thật khó để nói. Nó thường được gây ra bởi các nút cổ chai I / O với hoạt động của đĩa nặng hoặc kết nối bị suy giảm khi sử dụng các hệ thống tệp mạng (kịch bản thông thường nhất, theo kinh nghiệm của tôi).
(Đây là một câu hỏi có liên quan trong Hỏi khác nhau: /apple/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity- m .)