Posso limitar um processo a um determinado período de tempo / ciclos de CPU?

16

Temos um script que é executado em nossos servidores da web, acionado pela ação do cliente, que inicia um processo unix para gerar alguns arquivos de cache. Como esse processo age nos arquivos fornecidos pelo nosso cliente, às vezes ele se comporta mal, rodando tanto que o processo do PHP que gera o tempo expira ou usa tanto tempo de CPU que um sysadmin o mata.

Existe algum comando que eu possa executar, o que limitaria o tempo / tempo de execução da CPU do processo? Eu estou procurando um comando como /usr/bin/time , onde eu poderia executar esse comando e passar a linha de comando que eu quero que ele seja executado e limite.

    
por Josh 08.12.2010 / 23:48

3 respostas

13

Além da resposta de Gilles, existe a ferramenta cpulimit que faz exatamente o que você quer - incluindo a modificação no tempo de execução. Além disso, pode limitar a apenas algumas CPUs / Cores IIRC.

    
por 09.12.2010 / 01:35
12

De dentro de um programa, chame setrlimit(RLIMIT_CPU, ...) . No shell, chame ulimit -t 42 (isso não é padrão, mas é suportado pela maioria dos shells (incluindo bash e ksh) na maioria das variantes unix). Isso faz com que o processo atual seja eliminado depois de ter utilizado N segundos de tempo de CPU. A limitação é herdada por processos filhos. Um idioma de shell comum é (ulimit -t 42; runaway_process) se você desejar executar outros processos ilimitados depois do mesmo shell.

Veja também Existe uma maneira de limitar a quantidade de memória que um determinado processo pode usar no Unix? . O princípio é o mesmo, você está apenas limitando um recurso diferente.

    
por 09.12.2010 / 00:16
3

Você também pode usar o comando timeout para impedir que um processo seja executado por um período maior que o especificado.

exemplo

$ date
Mon May  6 07:35:07 EDT 2013
$ timeout 5 sleep 100
$ date
Mon May  6 07:35:14 EDT 2013

Consulte a página de manual de tempo limite para obter mais detalhes.

    
por 06.05.2013 / 13:51

Tags