Eu preciso do comando para matar processos em execução desde pelo menos 5 minutos para um determinado processo.
Vou ter que executar esse comando a cada cinco minutos ou mais.
Graças um milhão!
(o sistema é Centos5)
kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print $2}}')
onde "procname" é um nome de processo e 300 está no limite de tempo de execução
-9
ser um pouco mais amigável com meus processos e adicionei umgrep -v defunct |
antesawk
como de outra maneira, como você pode verprocname <defunct>
em sua saída, o que faria o comando awk não retornar um PID válido. E isso quebraria o comando de matar.$(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print "kill "$2}}')
é um pouco mais suave pouco, mas a resposta é grande de qualquer maneiraTalvez execute o comando de longa execução como este em um crontab?
fonte
Minha versão do script kill, aproveitando as duas respostas anteriores:
Ele filtra o processo por UID, NAME e se o tempo de execução exceder o limite - mata os processos e envia o relatório para o email. Se você não precisar desse email, basta comentar a última linha.
fonte
Encontrei a solução nesta página: http://www.directadmin.com/forum/showthread.php?t=26179
Crie um arquivo vazio e chame-o de killlongproc.sh
Copie isto:
Pare com isso no seu cronjob
fonte
kill -9
lo, pois isso não dá aos processos a chance de fazer uma limpeza normal antes de sair.Há um script aqui que você pode modificar para fazer o que deseja.
EDIT adicionou o script abaixo
fonte
etimes
deps
para mostrar diretamente os segundos decorridos desde o início do processo (não é necessário calculá-lo desde o início).ps
que não suportametimes
(apenasetime
), essa é uma ótima alternativa. Eu apenas o usei quando a resposta principal me deu um erro de #ps
Eu tive que resolver uma tarefa semelhante, e ela não precisa de um script. Para encerrar (sinalizar SIGTERM) os processos do executável "THECOMMAND":
A restrição ao usuário atual
-u $USER
é necessária apenas para evitar mensagens de erro desnecessárias se outros usuários também executarem "THECOMMAND". No seu próprio usuário crontab, você digitaria o seguinte:Em um sistema crontab (usuário 'root'), você adicionaria o seguinte:
Se você deseja matar (SIGKILL) os processos em vez de finalizá-los (SIGTERM), envie explicitamente o sinal SIGKILL adicionando
--signal SIGKILL
aos parâmetros. Exemplo para um sistema crontab:fonte
Para httpd
ps eaxo pid, tempo, comunicação | cauda -n + 2 | grep 'httpd' | awk 'substr ($ 0,9,1)> 0' | awk '{print $ 1}'
fonte