“ps” não retorna ao prompt

2

Eu tenho essa caixa de Linux que preciso manter periodicamente. Para fazer isso, eu emito um comando ps programaticamente e verifico os processos em execução.

Mas, como mostrado na captura de tela, às vezes, o comando ps não termina e retorna ao prompt, ele permanece lá e, assim, meu aplicativo não pode continuar.

Também é óbvio que os comandos anteriores ps ainda estão em execução enquanto o atual (ou seja, qual saída é mostrada na captura de tela) também é interrompido.

Alguém sabe o que poderia ser o problema e como corrigi-lo?

    
por Muhammad Gelbana 20.06.2013 / 13:00

2 respostas

6

D na quarta coluna significa que o processo está atualmente envolvido em uma chamada do sistema. Esse estado do sistema normalmente dura por um tempo muito curto, portanto, é incomum observá-lo. Observar D tende a indicar uma E / S lenta (por exemplo, em um sistema de arquivos da rede) - que ps não está fazendo - ou algo errado no kernel ou no hardware.

Você está observando um bug do kernel ou alguma parte do seu hardware está falhando. Para saber mais, o primeiro passo é encontrar arquivos de log. Seu sistema está rodando BusyBox e sua captura de tela mostra que está executando syslogd sem parâmetros, então todos os registros do sistema estão em% código%. Há uma boa chance de que esse arquivo contenha alguma indicação do que está errado. Se você precisar de ajuda para interpretar os registros, edite-os em sua pergunta (ou coloque-os on-line em algum lugar, se eles forem muito grandes).

    
por 20.06.2013 / 19:26
0

Eu tenho algumas sugestões. Não vamos nos preocupar com o porque acontece, mas com o modo de executar o ps sem que ocorra um problema.

Aqui estão algumas sugestões que seriam fáceis de testar, considerando o seu nível de experiência com o linux / unix:

  1. Tente executar ps auxwwf > myprocesses && cat myprocesses . Isto lhe dará uma lista de todos os processos em execução com informações detalhadas e, se o primeiro comando for bem sucedido, você poderá ler o conteúdo de meus processos.

  2. Não use ps sozinho. Existem muitas variações diferentes, mas meu favorito pessoal é auxwwf . Outro bom é ps lax .

  3. Tente enviar o processo para o segundo plano fazendo: ps auxwwf & Então você pode digitar jobs e ver o PID do processo ps. Você pode então trazê-lo digitando fg . Para enviar seu comando ps para o background novamente, você pode pressionar Ctrl z . Dessa forma, você controla ps . Se parar, você pode abrir outra sessão de terminal e matar o PID associado a ela.

Deixe-me saber se isso funciona para você. São apenas algumas coisas que você pode tentar como um trabalho. Tenho certeza que alguém terá outras maneiras.

    
por 20.06.2013 / 15:26

Tags