dmesgで何かが見つかったら、プロセスを終了するために無限ループをどのように作成できますか?

dmesgで何かが見つかったら、プロセスを終了するために無限ループをどのように作成できますか?

一部/何らかの値が返される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

いくつかの問題:

  • できるだけ多くのリソースを消費する忙しいループで実行しています。これはsleepingが合理的であると想像できる例です。
  • しかし、最新バージョンにはdmesg出力に続くフラグがあります。だから、全体の内容を(テストされていない)として書き換えることができます。

    while true
    do
        dmesg --follow | tail --follow --lines=0 | grep --quiet 'BUG: workqueue lockup'
        killall someprocessname
    done
    
  • コードを読みやすいようにインデントする必要があります。
  • これは本当に奇妙ですが、[- 見てください。testhelp [

おすすめ記事