Einige Probleme:
- Sie führen dies in einer Besetztschleife aus, die so viele Ressourcen wie möglich verbraucht. Dies ist eine Instanz, in der
sleep
ing durchaus gerechtfertigt sein könnte. -
Neuere Versionen von
dmesg
ein Flag haben, um der Ausgabe zu folgen, sodass Sie das Ganze als (ungetestet) umschreiben könntenwhile true do dmesg --follow | tail --follow --lines=0 | grep --quiet 'BUG: workqueue lockup' killall someprocessname done
- Der Code sollte eingerückt sein, damit er lesbar ist.
- Es ist wirklich seltsam, aber
[
ist dasselbe wietest
- siehehelp [
.
Eine Variante der Antwort von @l0b0:
dmesg --follow | awk '
/BUG: workqueue lockup/ { system ("killall someprocessname") ; rem="done at each occurrence. You could add further things, like print to a logfile, etc.,"
}'
Dies lässt uns die Schleife ausführen, was einige Vorteile hat:
- es wird funktionieren, bis dieser Prozess stirbt.
- Es darf auch nicht mehr als 1
killall
aufgerufen werden pro Vorkommen des Suchstrings "BUG:Workqueue Lockup", der die andere Antwort verbessert.
Zum Testen:Sie können dies in ein Skript namens thescript
einfügen , und führen Sie nohup thescript &
aus , sodass thescript
läuft weiter, auch nachdem Sie Ihre Sitzung beendet haben.
Wenn Sie zufrieden sind, funktioniert es, beenden Sie es, und dann können Sie es (anstatt es jedes Mal in einer Shell mit nohup
auszuführen). ) in einen daemon script
umwandeln die Sie dann in Ihrem aktuellen Runlevel gestartet haben können.
dh:Wenn Sie ein anderes Skript als Modell verwenden (Sie müssen mindestens die Start-, Stopp- und Statusabschnitte haben), können Sie thescript
ändern entsprechend und platzieren Sie es dann innerhalb von /etc/rc.d/init.d
, und haben einen symbolischen Link namens Sxxthescript
unter den entsprechenden /etc/rc.d/rcN
, N
eine Zahl für Ihren normalen Runlevel ist (siehe die obersten Zeilen von who -a
um den aktuellen Runlevel zu kennen). Und den passenden Kxxthescript
haben Symlinks auch in jedem (oder fast jedem) Runlevel, so dass das Skript beim Wechseln des Runlevels entsprechend beendet wird.
Oder tun Sie "die entsprechenden Dinge", damit es über systemd oder ein gleichwertiges System, das Ihre Distribution verwendet, ausgeführt/gestoppt wird.