Salta de um processo quando fica preso [duplicado]

10

Eu escrevi um loop para iterar todo o arquivo binário .out c e copiar suas saídas em um arquivo de texto (a saída para cada arquivo binário é apenas um valor hash de uma linha, saída de uma linha para um programa). Aqui está o meu código até agora:

for j in {1..10}
do
    ./gcc-$j.out >> gcc-result.txt
done

Infelizmente, alguns arquivos binários têm alguns problemas desconhecidos e não podem ser executados corretamente (eles ficaram presos e não podem prosseguir para o próximo programa).

Eu não vou consertar o código c, mas eu quero que meu bash pule automaticamente para executar o próximo programa dentro de um tempo limite (digamos, 10 segundos), e também escreva "0" para o gcc-result.txt .

Agradecemos antecipadamente se você tiver uma ideia para resolver esse problema.

    
por Yang Xia 27.04.2015 / 12:46

2 respostas

11

Você pode usar o comando de tempo limite:

if timeout 10 ping google.fr > /dev/null
then
    echo "process successful"
else
    echo "process killed"
fi

mostra process killed e

if timeout 10 ls /usr/bin | wc -l > /dev/null
then
    echo "process successful"
else
    echo "process killed"
fi

mostra process successful . Com base nisto, você poderia executar cada comando usando tal if; then; else; fi , redirecionar a saída padrão para um arquivo temporário e copiar esse temporário para o arquivo de destino no caso de sucesso, gerando o arquivo de destino no caso de falha.

Como posso matar um processo e ter certeza de que o PID não foi reutilizado poderia ser útil no caso de você não tem tempo limite.

    
por 27.04.2015 / 13:12
4

Você pode certamente matar o processo filho após algum tempo de execução e anexar o arquivo de texto que você precisa com '0' de dentro do seu script bash.
Você pode encontrar script Bash que mata um processo filho depois de um determinado tempo limite útil.

    
por 27.04.2015 / 12:51