No es necesariamente una mala señal, pero déjame responder tu última pregunta primero:
¿Qué significa exactamente?
En el top
código fuente (de http://www.opensource.apple.com/release/mac-os-x-1082/ ) el estado atascado se denomina identificador LIBTOP_STATE_STUCK
(de 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
};
(...)
}
Más adelante en el mismo archivo, LIBTOP_STATE_STUCK
se asigna al estado del núcleo 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;
(...)
}
Entonces, un proceso en estado atascado significa que el proceso / hilo está en un estado de espera ininterrumpible , que es cómo TH_STATE_UNINTERRUPTIBLE
se define en la estructura del kernel thread_basic_info
(ver http://web.mit.edu/darwin/src/modules/xnu/osfmk/ man / thread_basic_info.html ):
struct thread_basic_info
{
(...)
integer_t run_state;
(...)
};
donde run_state
es:
run_state: el estado de ejecución del hilo. Los valores posibles son:
(...)
- TH_STATE_UNINTERRUPTIBLE: el hilo está en un estado de espera ininterrumpible.
(...)
Esto generalmente es causado por un proceso en espera de E / S, es decir, el proceso ha solicitado leer o escribir en / desde el disco o la red y espera a que vuelva la llamada del sistema (consulte http://en.wikipedia.org / wiki / Sleep_% 28operating_system% 29 # Uninterruptible_sleep o http://www.novell.com/support/kb/doc.php?id=7002725 para obtener más información).
(Cuando no se utilizan las opciones de BSD, como suele ser el caso en Linux, ps
muestra la suspensión ininterrumpida como estado D ).
¿Es parte del ciclo de vida normal del proceso?
Sí lo es. Lo que no es normal es que un proceso permanezca en este estado durante mucho tiempo. Esa es una mala señal.
¿Por qué este proceso en particular?
Dificil de decir. Por lo general, se debe a cuellos de botella de E / S con actividad intensa en el disco o conectividad degradada cuando se utilizan sistemas de archivos de red (el escenario más habitual, en mi experiencia).
(Esta es una pregunta relacionada en Ask Different: /apple/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity- m .)
ps axug
ops -eo user,pid,stat,args
. En Linux, los que tienen un código de estado 'D' con los mismosps
comandos. Consulte la explicación de la palabra clave de estado (OS X) o la sección CÓDIGOS DE ESTADO DEL PROCESO (Linux)man ps
para obtener más información. O, en OS X, puede ejecutartop
y buscar procesos marcados comostuck
en la columna ESTADO.