ไม่จำเป็นต้องเป็นสัญญาณที่ไม่ดี แต่ให้ฉันตอบคำถามสุดท้ายของคุณก่อน:
มันหมายความว่าอะไรกันแน่?
ในtop
ซอร์สโค้ด (จากhttp://www.opensource.apple.com/release/mac-os-x-1082/ ) สถานะติดจะถูกอ้างถึงเป็นตัวระบุLIBTOP_STATE_STUCK
(จาก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
};
(...)
}
ต่อมาในไฟล์เดียวกันLIBTOP_STATE_STUCK
ถูกแมปกับสถานะเคอร์เนล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;
(...)
}
ดังนั้นกระบวนการที่อยู่ในสถานะติดหมายความว่ากระบวนการ / เธรดอยู่ในสถานะรอเครื่องสำรองซึ่งเป็นวิธีที่TH_STATE_UNINTERRUPTIBLE
กำหนดไว้ในโครงสร้างเคอร์เนลthread_basic_info
(ดูhttp://web.mit.edu/darwin/src/modules/xnu/osfmk/) man / thread_basic_info.html ):
struct thread_basic_info
{
(...)
integer_t run_state;
(...)
};
อยู่ที่ไหนrun_state
:
run_state: สถานะการทำงานของเธรด ค่าที่เป็นไปได้คือ:
( ... )
- TH_STATE_UNINTERRUPTIBLE: เธรดอยู่ในสถานะรอไม่สามารถอินเตอร์รัปต์ได้
( ... )
ปัญหานี้มักเกิดจากกระบวนการที่รอ I / O นั่นคือกระบวนการได้ขอให้อ่านหรือเขียนไปยัง / จากดิสก์หรือเครือข่ายและรอให้ระบบโทรกลับ (ดูที่http://en.wikipedia.org / wiki / Sleep_% 28operating_system% 29 # Uninterruptible_sleepหรือhttp://www.novell.com/support/kb/doc.php?id=7002725สำหรับข้อมูลเพิ่มเติม)
(เมื่อไม่ได้ใช้ตัวเลือก BSD เนื่องจากโดยปกติจะเป็นกรณีใน Linux ps
จะแสดงสถานะสลีปแบบไม่หยุดชะงักเป็นสถานะD )
มันเป็นส่วนหนึ่งของวงจรชีวิตปกติของกระบวนการหรือไม่?
ใช่แล้ว. สิ่งที่ไม่ปกติคือกระบวนการอยู่ในสถานะนี้เป็นเวลานาน นั่นเป็นสัญญาณที่ไม่ดี
ทำไมกระบวนการนี้โดยเฉพาะ
ยากที่จะพูด มันมักจะเกิดจากคอขวดของ I / O ที่มีกิจกรรมบนดิสก์หนักหรือการเชื่อมต่อที่ลดลงเมื่อใช้ระบบไฟล์ของเครือข่าย
(นี่เป็นคำถามที่เกี่ยวข้องใน Ask Different: /apple/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity-in-activity/ ม .)