Como sei se o terminal do bash trava ou se um processo está demorando?

1

Eu estava no mesmo lugar que esse cara , onde eu achava que um processo havia causado a suspensão do bash, mas estava apenas demorando um pouco. Corri gem install berkshelf e, felizmente, o processo apareceu no Activity Monitor, então sabia que ainda estava funcionando, mas existe uma maneira mais confiável de fazer isso?

    
por michaelsnowden 19.01.2014 / 20:33

2 respostas

3

Você realmente não pode dizer a diferença entre um processo pendente ou "apenas demorando um pouco". Um processo pode responder a sinais, mas não tem para

.

Quando um processo "trava", ele provavelmente fica preso em um loop infinito, ou está aguardando por algum evento que nunca acontece. Mas também poderia fazer muito trabalho.

Por exemplo, um processo que faz um trabalho intensivo pode não reagir imediatamente ao Ctrl-C (um sinal de terminação SIGINT ), mas pode sair um pouco mais tarde ou não sair. Esse é geralmente o caso em que você envia um SIGKILL , que não pode ser ignorado por um processo.

Observe que, em toda essa situação, o shell real (por exemplo, Bash) nunca fica suspenso. Simplesmente falando, o shell apenas executa o processo e o coloca em primeiro plano. Você ainda pode suspender o processo e continuar a executá-lo em segundo plano ( Ctrl-Z e, em seguida, bg ). Seu shell ainda funcionaria.

    
por 19.01.2014 / 20:41
1

Uma boa coisa a fazer é executar processos que demorem muito tempo no modo detalhado. Dessa forma você pode ver o progresso e se ele parar, você sabe onde e pode (espero) resolver o problema. Além disso, (por padrão, com stty sane ) Ctrl + C envia SIGINT , mas Ctrl + Z envia SIGTSTP .

    
por 19.01.2014 / 21:12

Tags