Loop: Inicia o programa e mata após o tempo limite

3

por razões de depuração eu quero identificar um desses erros aparecendo apenas ocasionalmente. Portanto, eu quero codificar um loop while no shell

  • iniciando o programa (se for segfault = > é o que eu quero)
  • elimina o programa após um determinado tempo limite (por exemplo, alguns segundos)

O problema aqui é que o PID mudará. Você pode me dar uma dica de como fazer isso? Eu uso o zsh, mas outras conchas são bem-vindas também!

    
por math 13.08.2010 / 18:12

4 respostas

0
#/usr/bin/env zsh
for i in 'seq 1 10'; do
    echo "start sleep";
    sleep 30&
    LAST_CHILD=$!
    echo "PID\$!: "$LAST_CHILD;
    echo "wait for kill:"
    sleep 1 && kill -9 $LAST_CHILD;
done

também deve funcionar com o bash, mas ainda preciso de alguma detecção de segfault para que o loop seja interrompido.

    
por 13.08.2010 / 20:29
4

O tempo limite parece com o que você está procurando.

man timeout
timeout - run a command with a time limit
    
por 22.08.2010 / 21:59
1

Não faça isso há algum tempo, mas a idéia básica é fazer com que o shell em execução envie seu PID para um arquivo nomeado antes de iniciar o loop e, em seguida, leia esse arquivo novamente com um programa killer separado que tenha o temporizador ativado. isto. Não é "difícil", mas o diabo está nos detalhes ...

    
por 13.08.2010 / 18:17
1

Experimente o script bash aqui:

link

Ele cria um processo de watchdog que conhece o PID do subcomando a ser executado. Advertência: neste script, o comando para matar precisa ser o filho imediato do script.

    
por 13.08.2010 / 19:00