Non è necessariamente un brutto segno, ma lasciami prima rispondere alla tua ultima domanda:
Cosa significa esattamente?
Nel top
codice sorgente (da http://www.opensource.apple.com/release/mac-os-x-1082/ ) lo stato bloccato viene indicato come identificatore LIBTOP_STATE_STUCK
(da 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
};
(...)
}
Più tardi nello stesso file, LIBTOP_STATE_STUCK
viene mappato allo stato del 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;
(...)
}
Quindi un processo in stato bloccato significa che il processo / thread è in uno stato di attesa ininterrotto , che è come TH_STATE_UNINTERRUPTIBLE
è definito nella struttura del kernel thread_basic_info
(vedi http://web.mit.edu/darwin/src/modules/xnu/osfmk/ man / thread_basic_info.html ):
struct thread_basic_info
{
(...)
integer_t run_state;
(...)
};
dove si run_state
trova:
run_state: lo stato di esecuzione del thread. I valori possibili sono:
(...)
- TH_STATE_UNINTERRUPTIBLE: il thread è in uno stato di attesa non interrompibile.
(...)
Questo di solito è causato da un processo in attesa su I / O, ovvero il processo ha richiesto di leggere o scrivere sul / dal disco o dalla rete e attende che la chiamata di sistema ritorni (vedi http://en.wikipedia.org / wiki / Sleep_% 28operating_system% 29 # Uninterruptible_sleep o http://www.novell.com/support/kb/doc.php?id=7002725 per ulteriori informazioni).
(Quando non si utilizzano le opzioni BSD, come di solito accade in Linux, viene ps
visualizzato il sonno ininterrotto come stato D. )
Fa parte del normale ciclo di vita del processo?
Sì. Ciò che non è normale è che un processo rimane in questo stato per lungo tempo. È un brutto segno.
Perché questo processo in particolare?
Difficile da dire Di solito è causato da colli di bottiglia di I / O con attività del disco pesante o connettività degradata quando si utilizzano i filesystem di rete (lo scenario più comune, nella mia esperienza).
(Questa è una domanda correlata in Chiedi diverso: /apple/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity- m .)