To niekoniecznie zły znak, ale najpierw pozwól mi odpowiedzieć na twoje ostatnie pytanie:
Co to dokładnie znaczy?
W top
kodzie źródłowym (z http://www.opensource.apple.com/release/mac-os-x-1082/ ) stan zablokowania jest określany jako identyfikator LIBTOP_STATE_STUCK
(z 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
};
(...)
}
Później w tym samym pliku LIBTOP_STATE_STUCK
jest mapowany do stanu jądra 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;
(...)
}
Zatem proces w stanie zablokowanym oznacza, że proces / wątek znajduje się w nieprzerwanym stanie oczekiwania , co TH_STATE_UNINTERRUPTIBLE
jest zdefiniowane w strukturze jądra thread_basic_info
(patrz http://web.mit.edu/darwin/src/modules/xnu/osfmk/ man / thread_basic_info.html ):
struct thread_basic_info
{
(...)
integer_t run_state;
(...)
};
gdzie run_state
jest:
run_state: stan uruchomienia wątku. Możliwe wartości to:
(...)
- TH_STATE_UNINTERRUPTIBLE: Wątek znajduje się w stanie oczekiwania, którego nie można przerwać.
(...)
Jest to zwykle spowodowane przez proces oczekujący na We / Wy, to znaczy, że proces zażądał odczytu lub zapisu na / z dysku lub sieci i czeka na powrót wywołania systemowego (patrz http://en.wikipedia.org / wiki / Sleep_% 28operating_system% 29 # Uninterruptible_sleep lub http://www.novell.com/support/kb/doc.php?id=7002725, aby uzyskać więcej informacji).
(Gdy nie używasz opcji BSD, jak to zwykle ma miejsce w Linuksie, ps
pokazuje nieprzerwany sen jako stan D. )
Czy jest to część normalnego cyklu życia procesu?
Tak to jest. Nie jest normalne, że proces pozostaje w tym stanie przez długi czas. To zły znak.
Dlaczego w szczególności ten proces?
Trudno powiedzieć. Zwykle jest to spowodowane wąskimi gardłami we / wy o dużej aktywności dysku lub pogorszoną łącznością przy korzystaniu z sieciowych systemów plików (z mojego doświadczenia wynika, że jest to najczęściej stosowany scenariusz).
(Jest to powiązane pytanie w Ask Different: /apple/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity- m .)
ps axug
lubps -eo user,pid,stat,args
. W Linuksie, te z kodem stanu „D” z tymi samymips
poleceniami. Abyman ps
uzyskać więcej informacji, zobacz objaśnienie słowa kluczowego stanu (OS X) lub sekcja KODY PROCESU STANU (Linux) . Lub w OS X można uruchomićtop
i poszukać procesów oznaczonych jakstuck
w kolumnie STAN.