5

モジュールをアンロードしなくなるまで無限ループを実行したいモジュールを作成しました。現在、rmmodを実行すると、モジュールがまだビジーで、しばらくするとカーネルパニックが発生することがわかります。

while(1)
{
    .......

}

モジュールをアンロードするまで無限ループを実行できるトリックはありますか?

4

2 に答える 2

11

このループはどのコンテキストで実行されますか? これは非常に重要な質問です。

実行init_moduleすると、insmodプロセスが終了することはありません。これは非常に悪いことです。
何らかのシステムコールがそれを実行すると、システムコールは返されず、それも悪いことになります。
どちらの場合も、プロセスを強制終了する方法はありません (でさえもkill -9)。
これを softIRQ ハンドラー (または、さらに悪い場合は hardIRQ ハンドラー) で実行すると、システムがハングします。

このタスク専用のカーネル スレッドで実行すると、正しく処理できる可能性があります。
ただし、CPU を完全に占有したくない場合は、スケジューラを呼び出して他のタスクを実行させる必要があります。msleep_interruptibleそれを行うには良い方法です。

于 2012-04-19T13:16:15.650 に答える
3

これが機能するかどうかはわかりませんが、の代わりに、最初に設定されているをwhile(1)使用して、に設定します。while(notStopped)10stop_module()

于 2012-04-19T07:19:54.913 に答える