Seção Wchan na saída ps não mostrando nada

Seção Wchan na saída ps não mostrando nada

Eu sei que se um processo entrar em Destado, 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 Destado que mostram que há algo errado em minha máquina. Além disso, mesmo após a reinicialização, eles voltam ao Destado. Eu pesquisei on-line e encontrei aquela wchanseção na saída ps que informa o que meu processo está aguardando no kernel.

Quando uso este comando, ps axl| grep Dentro -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 statecoluna 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 pslê as informações do wchan, que você também /proc/$pid/wchanpode acessar diretamente , para facilitar o teste. catEsse arquivo lê 0se a recuperação de informações do wchan falhou, o que psse traduz em -.

Em sistemas onde wchanestá 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.

informação relacionada