Eu sei que se um processo entrar em D
estado, significa que está em estado ininterrupto. O processo não pode ser eliminado por nenhum sinal. Ele só sairá desse estado na reinicialização ou se a espera de E/S terminar.
Tenho muitos processos em D
estado que mostram que há algo errado em minha máquina. Além disso, mesmo após a reinicialização, eles voltam ao D
estado. Eu pesquisei on-line e encontrei aquela wchan
seção na saída ps que informa o que meu processo está aguardando no kernel.
Quando uso este comando, ps axl| grep D
entro -
na coluna wchan e não há explicação on-line do que isso significa.
Este é meu exemplo de saída para o comando acima.
0 0 69970 1 20 0 25064 1088 - D ? 0:00 ls -l
Não consigo entender o que -
significa a saída acima.
Responder1
Existem vários motivos possíveis para o wchan ser relatado como -
por ps
:
- o processo simplesmente não está bloqueado no kernel, ou seja, está em execução (cf. a
state
coluna ps) - oprocedimento de caminhada na pilhafalha devido a algum caso de canto ou condição de corrida. Poderá até falhar incondicionalmente, por exemplo, em kernels que requerem configurações apropriadas de ponteiro de quadro, mas foram compilados sem elas - verifique isso com
cat /proc/*/wchan
- toda a saída 0 indica suporte wchan quebrado (por exemplo, atualmente é o caso noFedora 31 e 32) - vocênão tenhoo necessáriopermissões do modo de acesso ptrace(ou seja
PTRACE_MODE_READ_FSCREDS
) - improvável - oa pesquisa de símbolo falhano kernel - improvável
Observe que a versão recente também ps
lê as informações do wchan, que você também /proc/$pid/wchan
pode acessar diretamente , para facilitar o teste. cat
Esse arquivo lê 0
se a recuperação de informações do wchan falhou, o que ps
se traduz em -
.
Em sistemas onde wchan
está quebrado, um substituto deve ser observado (requer root):
cat /proc/$pid/stack
Ou alternativamente, consulte (não requer privilégios de root):
cat /proc/$pid/syscall
Responder2
no kernel Linux mais recente você vê em qual função do kernel seu processo está travado
cat /proc/<pid_numer>/stack
Responder3
A página de manual do ps contém esta informação, "-" significa que o processo está em execução. Nome WCHAN da função do kernel na qual o processo está em suspensão, um "-" se o processo estiver em execução ou um "*" se o processo for multithread e ps não estiver exibindo threads.