Estou adivinhando que o problema que você quer resolver é que você tem algum processo sendo executado em sua caixa, que às vezes se comporta mal, e fica para sempre identificando um núcleo.
A primeira coisa que você quer fazer é tentar consertar o programa que enlouquece. Essa é de longe a melhor solução. Eu vou assumir que isso não é possível, ou você precisa de um kluge rápido para manter sua caixa funcionando até que seja consertado.
Você, no mínimo, deseja limitar seu script a apenas atingir o único programa com o qual está preocupado. Seria melhor se as permissões limitassem seu script assim (por exemplo, seu script é executado como usuário X, a única outra coisa sendo executada como X é o programa).
Melhor ainda seria usar algo como ulimit -t
para limitar a quantidade de tempo total de CPU que o programa pode usar. Da mesma forma, se consumir toda a memória, verifique ulimit -v
. O kernel impõe esses limites; veja o bash
manpage (é um shell embutido) e o setrlimit(2)
manpage para detalhes.
Se o problema não for um processo em execução, mas apenas muitos processos em execução, implemente alguma forma de bloqueio para impedir que mais de X seja executado (ou - isso deve estar familiarizado - ulimit -u
). Você também pode considerar a alteração da prioridade do agendador desses processos (usando nice
ou renice
), ou para ainda mais drástico, usando sched_setscheduler
para alterar a política para SCHED_IDLE
.
Se você precisar de mais controle, dê uma olhada nos grupos de controle (cgroups). Dependendo do kernel que você está executando, você pode realmente limitar a quantidade de tempo de CPU, memória, E / S, etc. que um grupo inteiro de processos juntos consome. Grupos de controle são bastante flexíveis; eles provavelmente podem fazer o que você estiver tentando fazer, sem quaisquer kluges frágeis. O Wiki do Arch Linux tem uma introdução aos cgroups que vale a pena ler, assim como A série de cgroups de Neil Brown na LWN.