Eu tenho várias simulações para fazer, cada uma é invocada python simulate.py <parameter list>
. O problema com essas simulações é que algumas delas ficam paralisadas sem sair, o que me impede de executá-las em lote com um script simples.
O que eu precisaria é de alguma forma de comando "restrição de tempo de execução" que mataria automaticamente o processo (de preferência pressionando virtualmente Ctrl + C , mas acho que o simples assassinato também servirá) depois de um tempo especificado, se o processo não terminou graciosamente por si só.
É claro que eu mesmo posso escrever esse script, mas desconfio que alguém já o tenha feito antes de mim, para que não precise reinventar a roda gastando horas com ps
, time
e bash manuais.
fonte
myProgram
conclusão seja concluída em menos tempo do quesleep
(uma suposição não razoável, pois o objetivo é definir um tempo de execução máximo permitido). Em seguida, você envia um sinal para um PID inexistente (nenhum dano real causado) ou para qualquer processo aleatório no sistema (potencialmente fatal).timeout
comando faz exatamente o que ele está procurando, esperando o OP responder aos meus comentários.timeout
deve ser a solução que eu preciso. Estou testando no momentoEu encontrei algo um pouco melhor, do que
timeout
:timelimit
.Tem várias vantagens; Uma é que o usuário pode interromper manualmente a execução pressionando "Ctrl + C".
O
timelimit
programa está disponível no repositório Debian.fonte
Você pode ajustar o tempo da CPU e outras coisas
ulimit
, especialmente para o tempo da CPU:fonte
O Bash usa uma variável chamada
$BASHPID
ela pode ser usada em uma situação como, por exemplo:Você pode alterar o argumento na chamada para
sleep
emdo_face()
que100
, em vez de10
ver o que acontece quando a criança leva muito tempo para fazer suas tarefas. Apenas mude a chamada para adormecerdo_face()
para uma chamada para o seu executável e, se levar muito tempo, o script irá eliminá-lo,20
segundos é o valor limitador neste exemplo. Os parâmetros podem ser implementados para que isso se torne um script simples de chamar e possa ser chamado por outro script em lote ou o que for. Manipular os arquivos pid para cada processo simultâneo é um problema que precisará ser tratado, talvez use sub-diretórios diferentes ...NB: No GNU Linux, é
sleep
possível usar argumentos de ponto flutuante, comosleep 0.1
dormir por um décimo de segundo.fonte