2012-04-02 10 views
0

まあ、カーネルを修正し、SIGNAL(#define SIGHELLO 33)を定義してキャッチします(printk "lalalalala"としましょう)。私はどこを定義するのか知っていますが、それを捕まえることはできません。 (プログラムが未知の信号を出力して終了する)どこに注入するのかわからない。誰かが知っていることを望みます。シグナルを定義してlinuxカーネルコードでキャッチする方法

答えて

0

信号の目的と処理が混乱するようです。 2つの特別な例外(SIGKILLとSIGSTOP/SIGTSTP)で、シグナルはカーネル内で特別な処理を受けません。 (彼らはsignal()などを使用してユーザ空間でキャッチすることができる。)

言われているので、信号処理はkernel/signal.cです。私は、このファイルの動作がカーネルモジュールによって変更できるとは思わない。

+0

私がしようとしていることは、少し異なります。カーネル内のあるプロセスから別のプロセスにシグナルを送りたい。他のプロセスが信号を受信すると、何か処理が行われます。私はSIGUNUSEDが助けになるかもしれないと思う。 – Nova

+0

カーネル内で生成され処理される場合、なぜシグナルが関与する必要がありますか?信号の動作を直接行うことができない何らかの理由はありますか? – duskwuff

+0

スケジューラがそのプロセスに切り替わるときに、プロセスのプロセス空間情報とCPU状態を追跡したいとします。これは、私がそれを追跡したいときはいつでも、私は別のプロセスでシステムコールを実行し、そのプロセスをそのターゲットプロセスに留意させることを意味します。それがSIGNALがここに関わっている理由です。 – Nova

関連する問題