Como posso executar e interromper um script em um loop

1

Eu tenho um script chamado demo.py Primeiro eu executo o script

python demo.py -some arguments

Depois de algum tempo (digamos 120 segundos) eu interrompo com Ctrl + C e executo novamente. Posso escrever um script bash para fazer essas etapas em um loop automaticamente?

    
por user3220381 17.06.2015 / 07:54

1 resposta

1
python demo.py -some arguments &
( sleep 120; kill -TSTP "$!")  & 
fg %1

O primeiro background python será iniciado e, em seguida, será iniciado um shell em segundo plano que sleep s por 120 segundos antes de enviar python o -TSTP - ou o sinal suspender . Isso não é estritamente idêntico a pressionar CTRL+C - para isso você deseja kill -INT "$!" - mas eu pensei que você gostaria de poder restaurá-lo novamente, pois isso é como fazer > CTRL+Z em vez disso.

Por último, a% job_de% foregrounds ID da tarefa fg - que, se esses forem os únicos dois processos na tabela %1 , será jobs .

E assim o seu python é executado, enquanto um demo er espera nas sombras.

Aqui está w / kill e uma espera de 5 segundos:

cat & ( sleep 5; kill -TSTP "$!" )& fg %1
cat
[1] + Stopped                    cat

Para fazer isso em um loop, você pode fazer:

(kill -TSTP 0); code=$?
python demo.py -some arguments & pid=$!  
while   (sleep 120;kill -TSTP "$pid")&
        fg %1; [ "$?" = "$code" ]
do :;   done
    
por 17.06.2015 / 08:14