Não é necessariamente um mau sinal, mas deixe-me responder sua última pergunta primeiro:
O que isso significa exatamente?
No top
código fonte (de http://www.opensource.apple.com/release/mac-os-x-1082/ ), o estado travado é chamado de 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
};
(...)
}
Posteriormente no mesmo arquivo, LIBTOP_STATE_STUCK
é mapeado para o estado do 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;
(...)
}
Portanto, um processo no estado parado significa que o processo / encadeamento está em um estado de espera ininterrupta , que é como TH_STATE_UNINTERRUPTIBLE
é definido na estrutura do kernel thread_basic_info
(consulte http://web.mit.edu/darwin/src/modules/xnu/osfmk/ man / thread_basic_info.html ):
struct thread_basic_info
{
(...)
integer_t run_state;
(...)
};
onde run_state
é:
run_state: o estado de execução do encadeamento. Os valores possíveis são:
(...)
- TH_STATE_UNINTERRUPTIBLE: O encadeamento está em um estado de espera ininterrupta.
(...)
Isso geralmente é causado por um processo aguardando E / S, ou seja, o processo solicitou a leitura ou gravação no / do disco ou na rede e aguarda o retorno da chamada do sistema (consulte http://en.wikipedia.org / wiki / Sleep_% 28operating_system% 29 # Uninterruptible_sleep ou http://www.novell.com/support/kb/doc.php?id=7002725 para obter mais informações).
(Quando não estiver usando as opções BSD, como é geralmente o caso no Linux, ps
mostra suspensão ininterrupta como estado D. )
Faz parte do ciclo de vida normal do processo?
Sim. O que não é normal é que um processo permaneça nesse estado por um longo tempo. Isso é um mau sinal.
Por que esse processo em particular?
Difícil de dizer. Geralmente, é causado por gargalos de E / S com atividade intensa do disco ou conectividade degradada ao usar sistemas de arquivos de rede (o cenário mais usual, na minha experiência).
(Esta é uma pergunta relacionada no Ask Different: /apple/58697/how-does-stuck-in-results-of-top-relate-to-not-responding-in-activity- m .)
ps axug
oups -eo user,pid,stat,args
. No Linux, aqueles com um código de estado 'D' com os mesmosps
comandos. Consulte a explicação da palavra-chave state (OS X) ou a seção PROCESS STATE CODES (Linux) emman ps
para obter mais informações. Ou, no OS X, você pode executartop
e procurar processos marcados comostuck
na coluna STATE.