Jestem zgadywania problem chcesz rozwiązać to, że masz jakiś proces uruchomiony na polu, które czasami niegrzeczne i siedzi na zawsze pegging rdzeń.
Pierwszą rzeczą, którą chcesz zrobić, to spróbować naprawić zwariowany program. To zdecydowanie najlepsze rozwiązanie. Zakładam, że nie jest to możliwe, albo potrzebujesz szybkiego kluge, aby utrzymać swoje pudełko do czasu jego naprawy.
Przynajmniej chcesz ograniczyć swój skrypt, aby uderzył tylko w jeden program, którego dotyczysz. Byłoby najlepiej, gdyby uprawnienia ograniczały twój skrypt w ten sposób (np. Twój skrypt działa jako użytkownik X, jedyną inną rzeczą działającą jako X jest program).
Jeszcze lepiej byłoby użyć czegoś takiego jak ulimit -t
ograniczenie całkowitego czasu procesora, który program może wykorzystać. Podobnie, jeśli zużywa całą pamięć, sprawdź ulimit -v
. Jądro wymusza te ograniczenia; zobacz stronę bash
podręcznika (jest to wbudowana powłoka) i stronę, setrlimit(2)
aby uzyskać szczegółowe informacje.
Jeśli problemem nie jest uruchomiony proces amokowy, ale zamiast tego działa po prostu zbyt wiele procesów, to zaimplementuj jakąś formę blokowania, aby zapobiec uruchomieniu więcej niż X (lub - to powinno się zaznajomić - ulimit -u
). Możesz także rozważyć zmianę priorytetu harmonogramu tych procesów (za pomocą nice
lub renice
), lub jeszcze bardziej drastycznego, za pomocą sched_setscheduler
zmiany polityki na SCHED_IDLE
.
Jeśli potrzebujesz jeszcze większej kontroli, spójrz na grupy kontrolne (cgroups). W zależności od uruchomionego jądra możesz faktycznie ograniczyć czas procesora, pamięć, operacje we / wy itp., Które pochłania cała grupa procesów. Grupy kontrolne są dość elastyczne; prawdopodobnie zrobią wszystko, co chcesz, bez żadnych kruchych ćwiartek. Arch Arch Wiki ma wprowadzenie do grup, które warto przeczytać, podobnie jak seria cgroups Neila Browna w LWN.
while [ 1 ]
zastanawiam się, ile procesora sam ten skrypt zużyje. Ponadto 3 połączeniakill -9
w skrypcie działającym stale? To daje mi dreszcze ...