Einige Probleme:
- Sie führen dies in einer Besetztschleife aus, die so viele Ressourcen wie möglich verbraucht. Dies ist eine Instanz, in der
sleeping durchaus gerechtfertigt sein könnte. -
Neuere Versionen von
dmesgein 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
killallaufgerufen 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.