Ich vermute, das Problem, das Sie lösen möchten, ist, dass auf Ihrer Box ein Prozess ausgeführt wird, der sich manchmal schlecht verhält und für immer einen Kern festhält.
Das erste, was Sie tun möchten, ist zu versuchen, das Programm zu reparieren, das verrückt wird. Das ist bei weitem die beste Lösung. Ich gehe davon aus, dass dies nicht möglich ist, oder Sie benötigen eine schnelle Kluge, um Ihre Box am Laufen zu halten, bis sie repariert ist.
Sie möchten Ihr Skript zumindest so einschränken, dass nur das eine Programm angezeigt wird, um das Sie sich Sorgen machen. Es ist am besten, wenn die Berechtigungen Ihr Skript wie folgt einschränken (z. B. wird Ihr Skript als Benutzer X ausgeführt, das einzige andere, was als X ausgeführt wird, ist das Programm).
Noch besser wäre es, die ulimit -t
Gesamt-CPU-Zeit zu begrenzen, die das Programm verwenden kann. Überprüfen Sie in ähnlicher Weise, ob der gesamte Speicher belegt ist ulimit -v
. Der Kernel erzwingt diese Grenzen. Weitere Informationen finden Sie in der bash
Manpage (es ist eine integrierte Shell) und in der setrlimit(2)
Manpage.
Wenn das Problem nicht ein Amok-Prozess ist, sondern nur zu viele Prozesse ausgeführt werden, implementieren Sie eine Art Sperre, um zu verhindern, dass mehr als X ausgeführt wird (oder - dies sollte bekannt werden ulimit -u
). Sie können auch in Betracht ziehen, die Scheduler-Priorität dieser Prozesse zu ändern (mithilfe von nice
oder renice
) oder noch drastischer, indem Sie sched_setscheduler
die Richtlinie in ändern SCHED_IDLE
.
Wenn Sie noch mehr Kontrolle benötigen, schauen Sie sich eine Kontrollgruppe (cgroups) an. Abhängig von dem Kernel, den Sie ausführen, können Sie die CPU-Zeit, den Arbeitsspeicher, die E / A usw., die eine ganze Gruppe von Prozessen zusammen verbraucht, tatsächlich begrenzen. Kontrollgruppen sind sehr flexibel; Sie können wahrscheinlich alles tun, was Sie versuchen, ohne zerbrechliche Klugheiten. Das Arch Linux Wiki bietet eine lesenswerte Einführung in cgroups , ebenso wie Neil Browns cgroups-Reihe bei LWN.
while [ 1 ]
Ich frage mich, wie viel CPU dieses Skript alleine verbrauchen wird. Auch 3 Aufrufekill -9
in einem Skript laufen ständig? Dies gibt mir die Schüttelfrost ...