2017-05-20 2 views
1

initルーチンに無限に実行されるはずのwhile(1)ループを持つカーネルモジュールがあります。カーネルモジュールで信号を捕捉する方法

ユーザー空間プログラムで同等のコードを使用している場合、Ctrl + Cキーを押すとユーザー空間プログラムが終了しますが、これはカーネルモジュールには当てはまりません。

カーネルモジュールに(カーネルモジュールがまだinitルーチンを実行しているときに)killシグナルを送信して終了/終了できる方法はありますか?カーネルには、事前

答えて

3

おかげであなたは信号/致命的なシグナルが到着しているかどうかをチェックするためにsignal_pending()またはfatal_signal_pending()を使用することがあります。

while(!fatal_signal_pending(current) { 
    // infinite loop 
} 

だから、あなたはinsmod <your-module.ko>のためにコントロール+ Cを押して、モジュールのinitあり関数はループを終了します。それはallow_signal()

でそれらを許可する場合にのみ、( kthread_create()または類似で作成)


カーネルスレッドは、信号をキャッチすることがあり

関連する問題