Sto indovinando il problema che si vuole risolvere è che hai qualche processo in esecuzione sulla propria macchina che a volte si comporta male, e si siede per sempre agganciare un nucleo.
La prima cosa che vuoi fare è tentare di riparare il programma che impazzisce. Questa è di gran lunga la soluzione migliore. Presumo che non sia possibile, o hai bisogno di un veloce kluge per mantenere la tua scatola in esecuzione fino a quando non viene risolto.
Almeno, vuoi limitare il tuo script per colpire solo il programma di cui ti preoccupi. Sarebbe meglio se le autorizzazioni limitassero lo script in questo modo (ad esempio, lo script viene eseguito come utente X, l'unica altra cosa in esecuzione come X è il programma).
Ancora meglio sarebbe usare qualcosa di simile ulimit -t
per limitare la quantità di tempo totale della CPU che il programma può usare. Allo stesso modo, se consuma tutta la memoria, controlla ulimit -v
. Il kernel applica questi limiti; vedere la bash
manpage (è una shell integrata) e la setrlimit(2)
manpage per i dettagli.
Se il problema non è un processo in esecuzione, ma è invece solo un numero eccessivo di processi in esecuzione, implementare una qualche forma di blocco per impedire l'esecuzione di più di X (o — questo dovrebbe essere familiare— ulimit -u
). Si può anche considerare di cambiare la priorità dello scheduler di quei processi (usando nice
o renice
), o per ancora più drastica, usando sched_setscheduler
per cambiare la politica in SCHED_IDLE
.
Se hai bisogno di un controllo ancora maggiore, dai un'occhiata a gruppi di controllo (cgroups). A seconda del kernel che stai eseguendo, puoi effettivamente limitare la quantità di tempo della CPU, memoria, I / O, ecc. Che consumano insieme un intero gruppo di processi. I gruppi di controllo sono abbastanza flessibili; possono probabilmente fare qualunque cosa tu stia cercando di fare, senza fragili kluges. Arch Linux Wiki ha un'introduzione ai cgroups che vale la pena leggere, così come la serie di cgroups di Neil Brown su LWN.
while [ 1 ]
mi chiedo quanta CPU consumerà solo questo script. Inoltre, 3 chiamate akill -9
in uno script sono in esecuzione costantemente? Questo mi dà i brividi ...