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 ?

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 .)


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.