Na maioria dos sistemas, você pode usar o comando ulimit
quando você inicia o programa para limitar a quantidade de tempo de CPU que pode usar. Sob o capô, isso chama setrlimit
com o argumento RLIMIT_CPU
. Após o programa ter usado tanto tempo, o programa é morto.
(ulimit -t 3600; myprogram)
Você pode refinar ainda mais definindo um limite flexível após o qual o programa recebe o sinal SIGXCPU
(que pode capturar) e um limite rígido após o qual o programa recebe o sinal SIGKILL
(que é inevitavelmente fatal). / p>
(ulimit -t -S 3590; ulimit -t -H 3600; myprogram)
Eu não sei de nenhum utilitário de shell para alterar o limite de um programa em execução. Você pode fazer com que o processo execute a chamada do sistema setrlimit
via ptrace
, por exemplo, usando um depurador. Observe que algumas estruturas de segurança desabilitam esse uso de ptrace
(por exemplo, ele é desativado por padrão nas versões atuais do Ubuntu), não sei se o RHEL 5 permite isso.
gdb -n -pid 1234 -batch -x /dev/stdin <<EOF
call setrlimit(RLIMIT_CPU, {(rlim_t) 3590, (rlim_t) 3600})
detach
quit
EOF
( 1234
é o ID do processo e os dois números dentro das chaves são o limite flexível e rígido.)