一部/何らかの値が返されるwhile
と、特定のプロセスを終了する必要があるループを作成する必要があります。dmesg
これが私が持っているものです。
#!/bin/bash
while [ 1 ];
do
BUG=$(dmesg | grep "BUG: workqueue lockup" &> /dev/null)
if [ ! -z "$BUG" ]; then
killall someprocessname
else
break
fi
done
! -z
これをすべきかわからない[ test -n "$BUG" ]
-n はバイナリを期待するという意味だと思います。
BUGロックがすべてのプロセスを停止するため、このスクリプトが機能するかどうかはわかりませんが、コンピュータが完全にクラッシュする前にまだ数行が残っています。dmesg
たぶんプロセスを追いかけて終了することができます。
ベストアンサー1
いくつかの問題:
- できるだけ多くのリソースを消費する忙しいループで実行しています。これは
sleep
ingが合理的であると想像できる例です。 しかし、最新バージョンには
dmesg
出力に続くフラグがあります。だから、全体の内容を(テストされていない)として書き換えることができます。while true do dmesg --follow | tail --follow --lines=0 | grep --quiet 'BUG: workqueue lockup' killall someprocessname done
- コードを読みやすいようにインデントする必要があります。
- これは本当に奇妙ですが、
[
- 見てください。test
help [