Detectar erro de um processo em execução?

0

Eu tenho um para executar um processo que às vezes produz um erro. No entanto, toda vez que produz esse erro, ele não sai do processo.

aneesh@nb-14:~$ emulator -no-boot-anim -avd Andreud
Emulator ERROR: Unable to load VM from snapshot. The snapshot file was saved for a
different hardware configuration
^Z
aneesh@nb-14:~$ emulator -no-boot-anim -avd Andreud

Em caso de sucesso, o cursor está no início da segunda linha acima e o erro do emulador não é exibido. Em caso de falha, mostra o erro, mas sou forçado a pará-lo. Os comandos podem parecer mostrar que esta questão está fora do tópico.

No entanto, minha pergunta é como (por meio de um comando) detectar esse erro enquanto esse processo ainda está em execução e, se sim, matá-lo.

    
por Karthik C 02.07.2013 / 13:23

1 resposta

1

Inicie o emulador em segundo plano, enviando toda a sua saída para um arquivo temporário

emulator -no-boot-anim -avd Andreud &>/tmp/emulator-output &

Depois pegue o PID do processo lançado recentemente e armazene-o em uma variável chamada EMULATORPID

EMULATORPID=$!

Em seguida, enquanto o emulador ainda está em execução, observe o arquivo de saída do erro e, quando ele for encontrado, mate o processo por PID:

while ps -p$EMULATORPID ; do
   grep "Emulator ERROR" /tmp/emulator-output && kill $EMULATORPID
done

Para satisfazer o requisito adicional de encerrar o loop while após cinco segundos, você pode definir um contador, incrementá-lo em cada loop e adicionar um atraso de uma seção a cada iteração da seguinte forma:

  CTR=0
  while ps -p$EMULATORPID &&  [ $CTR -lt 5 ]  ; do
     grep "Emulator ERROR" /tmp/emulator-output && kill $EMULATORPID
     sleep 1s;
     CTR=$[CTR+1] 
  done
    
por Nate from Kalamazoo 02.07.2013 / 15:06