Is there anyway to stop this without rebooting the machine?
Não é totalmente impossível, e você pode fazê-lo através da sorte - ou seja, você consegue matar todos os processos antes que outro seja gerado. 1 Mas você tem que ter muita sorte, então não é um esforço confiável ou que valha a pena [talvez slm tenha mais sorte do que eu aqui, lol - TBH eu não tentei tanto] . Se você jogar com as prioridades, suas chances podem melhorar (veja man nice
), embora eu suspeite que isso também vai mexer com a eficácia da bomba garfo.
Uma ideia melhor pode ser usar um que expira. Para um exemplo em C, consulte a nota de rodapé número 5 para minha resposta aqui . 2 Você pode fazer a mesma coisa com um script de shell, embora não seja tão curto quanto :(){ :|:& };:
:
#!/bin/bash
export fbomb_duration=$1
export fbomb_start=$(date +%s)
go () {
now=$(date +%s)
if [[ $(($now-$fbomb_start)) -gt $fbomb_duration ]]
then exit 0;
fi
go &
}
while ((1)); do
go
done
Execute isso com um argumento, um número de segundos. Todos os garfos morrerão depois disso.
1 Na verdade, isso pode acontecer por si só, eventualmente, se o assassino da OOM do kernel tiver sorte. Mas não prenda a respiração.
2 O método usado para diminuir essa bomba em particular (configurando vm.overcommit_memory=2
) quase certamente não funcionará em geral, mas você pode tentar. Eu não sou desde que eu gostaria de deixar meu sistema funcionando por enquanto;)