Comando que retorna somente quando um processo específico termina

0

O que eu quero fazer é ter um comando que retornará quando um programa for fechado. Por exemplo, digamos que eu abri o navegador chromium usando o gerenciador de janelas ou outra janela do console, gostaria de ter um comando que eu poderia emitir e que só retornaria quando o navegador do cromo fosse desligado para que eu pudesse tomar as medidas adequadas. / p>

Alguma idéia?

    
por Brian 20.03.2015 / 16:26

1 resposta

3

Estou fazendo algo semelhante no meu servidor doméstico, onde quero um sistema de enfileiramento rápido e sujo para cálculos químicos quânticos. O seguinte é um pedaço do meio do meu script de enfileiramento:

# If second argument passed, treat as PID to check for
#  completion before proceeding
if [ -n "$2" ]
then
  while [ 'ps aux | grep orca | sed -r 's/[a-z0-9]+[ ]+([0-9]+).*//' | grep "^$2\$" | wc -l' -gt 0 ]
  do
    sleep 1m
  done
fi

Os comandos dentro dos back-ticks executam o seguinte:

  1. Chame ps aux para obter a lista de processos
  2. grep o nome do executável (" orca " aqui) para proteger-se contra o caso raro em que o processo de interesse foi executado por tempo suficiente para que o uso do PID seja retrocedido e o PID de interesse tenha sido atribuído a um não relacionado processo
  3. sed de cada lista de processos restante, usando Regex estendido, para deixar apenas o número PID em cada linha
  4. grep para verificar se algum dos PIDs encontrados corresponde ao PID de destino
  5. wc -l fornece uma maneira fácil de contar o número de PIDs correspondentes (a contagem deve ser sempre um ou zero, mas a implementação -gt 0 deve ser robusta em relação a circunstâncias incomuns)

O script então dorme por um minuto (facilmente customizável) e repete a verificação do PID. Em qualquer ponto, o PID de interesse não é mais encontrado, o script segue em frente. No meu caso, os comandos downstream executam a computação apropriada; você pode se adaptar para executar qualquer ação que desejar.

    
por 20.03.2015 / 17:13