Como posso saber porque um processo está esperando?

1

Estou tentando executar um comando no OSX Mavericks e parece estar travando. Descobri que Control + T é um comando do Unix para mostrar o status de um trabalho em primeiro plano. Pressioná-lo várias vezes ao longo de vários minutos me dá:

$ bin/rake                                                                                
load: 3.68  cmd: ruby 55761 waiting 0.12u 0.02s
load: 3.47  cmd: ruby 55761 waiting 0.12u 0.02s
load: 3.47  cmd: ruby 55761 waiting 0.12u 0.02s
load: 3.09  cmd: ruby 55761 waiting 0.12u 0.02s
load: 2.41  cmd: ruby 55761 waiting 0.12u 0.02s
load: 4.38  cmd: ruby 55761 waiting 0.12u 0.02s

Eu entendo que isso significa que o status é "aguardando", ele gastou 0,12 segundos de tempo de usuário e apenas 0,02 segundos de tempo de CPU sendo executado.

Eu quero descobrir porque está preso esperando. Como posso determinar por que um processo está aguardando ?

    
por Nathan Long 03.07.2014 / 18:10

1 resposta

1

Execute dtruss para ver o que chamadas do sistema que um processo está fazendo:

dtruss -p55761

Isso lhe dirá em qual sistema o processo está sendo chamado com o PID 55761. Se a chamada do sistema acessar algum descritor de arquivo, lsof dirá a você qual arquivo está aberto lá.

lsof -p55761

Se o arquivo for um canal ou soquete, não sei como encontrar o que acontece se houver algo do outro lado.

    
por 04.07.2014 / 02:20

Tags