Processo preso: é um mau sinal?

23

Às vezes, alguns processos estão parados. Por exemplo:

PID    COMMAND          %CPU TIME     #TH  #WQ  #POR #MREGS RPRVT  RSHRD  RSIZE  VPRVT  VSIZE  PGRP  PPID  STATE
99357  plugin-container 0.1  12:07.07 10   1    224  2097   40M    84M    66M    82M    2757M  91688 99346 sleeping
99346  firefox          0.4  48:54.20 29   1    265  16250  467M   172M   799M   538M   4210M  91688 1     sleeping 
88029- Aquamacs       1.2  31:24.12 4    3    126  268    19M    49M    32M    36M    777M   88029 152   stuck

Faz parte do ciclo de vida normal do processo? Por que esse processo em particular?

O que isso significa exatamente ?

alecail
fonte

Respostas:

38

Não é necessariamente um mau sinal, mas deixe-me responder sua última pergunta primeiro:

O que isso significa exatamente?

No topcó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, psmostra 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 .)

jaume
fonte
1
Como posso descobrir quais processos exatamente estão bloqueados?
Mareoraft
3
@mareoraft No OS X, aqueles com um código de estado 'U' na saída de ps axugou ps -eo user,pid,stat,args. No Linux, aqueles com um código de estado 'D' com os mesmos pscomandos. Consulte a explicação da palavra-chave state (OS X) ou a seção PROCESS STATE CODES (Linux) em man pspara obter mais informações. Ou, no OS X, você pode executar tope procurar processos marcados como stuckna coluna STATE.
jaume