GNU/Linux >> Linux の 問題 >  >> Linux

dmesg に何かが見つかった場合にプロセスを強制終了する無限ループを作成するにはどうすればよいですか?

いくつかの問題:

  • これをビジー ループで実行しているため、できるだけ多くのリソースを消費します。これは sleep の 1 つのインスタンスです。 ことは正当化される可能性があります。
  • ただし、最近のバージョンの dmesg 出力に続くフラグがあるため、全体を (untest) として書き換えることができます

    while true
    do
        dmesg --follow | tail --follow --lines=0 | grep --quiet 'BUG: workqueue lockup'
        killall someprocessname
    done
    
  • コードは読みやすいようにインデントする必要があります。
  • 本当に変だけど [ test と同じです - help [ を参照 .

@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.,"
        }'

これにより、いくつかの利点があるループを実行できます:

  • そのプロセスが終了するまで動作します。
  • また、複数の killall を呼び出しません。 検索文字列「BUG:workqueue lockup」の出現ごとに、他の回答を改善します。

テストするには:これを thescript という名前のスクリプトに入れることができます 、および nohup thescript & を実行します 、だから thescript セッションを終了しても実行し続けます。

動作することに満足したら、それを強制終了してください (nohup を使用してシェルで毎回実行する代わりに) ) daemon script に変換します その後、現在のランレベルで開始できます。

つまり、別のスクリプトをモデルとして使用すると (少なくとも開始、停止、およびステータスのセクションが必要です)、thescript を変更できます。 適切に配置し、/etc/rc.d/init.d 内に配置します。 、そして Sxxthescript という名前のシンボリックリンクを持っています 適切な /etc/rc.d/rcN の下 、 N 通常のランレベルの数値です (who -a の一番上の行を参照) 現在のランレベルを知るため)。そして、適切な Kxxthescript を持っています ランレベルを切り替えるときにスクリプトが適切に強制終了されるように、すべての (またはほぼすべての) ランレベルでシンボリック リンクも使用します。

または、「適切なこと」を実行して、systemd またはディストリビューションが使用する同等のシステムを介して実行/停止します。


Linux
  1. プログラムで新しい cron ジョブを作成するにはどうすればよいですか?

  2. スクリプトを使用して crontab を作成する方法

  3. Linux シェルでは、複数行の文字列の各行をどのように処理できますか?

  1. 各フォルダにファイルを作成するにはどうすればよいですか?

  2. 古いバージョンの Bash で Bash スクリプトをテストするにはどうすればよいですか?

  3. ディスクイメージをマウントするにはどうすればよいですか?

  1. Linux で実行中のプロセスのダンプ ファイルを作成するにはどうすればよいですか?

  2. Linux で継続的に実行される Python スクリプトを手動で停止する方法

  3. コマンドラインからdmesgに書き込むにはどうすればよいですか?