カーネル空間で作業していて、アプリケーションがいつ停止またはクラッシュしたかを知りたいです。ioctl 呼び出しを受け取ると、アプリケーションのプロセスに関する多くの情報がある構造体 task_struct を取得できます。私の問題は、プロセスがまだ生きているかどうかを定期的にチェックして、プロセスが強制終了されたときに非同期呼び出しを行うことです。
私のテスト環境は QEMU 上にあり、しばらくしてアプリケーションでシステム ("kill -9 pid ") を実行しました。一方、カーネルでは、次のように task_struct を定期的にチェックしました
。/* -1 実行不可、0 実行可能、>0 停止 */
static inline int pid_alive(struct task_struct *p)
問題は、私の task_struct ポインターが変更されていないように見えることです。通常、各プロセスには task_struct があり、もちろんプロセスの状態に対応しています。そうでなければ、「揮発性の長い状態」のポイントがわかりません
私は何が欠けていますか?私が QEMU でテストしているのは、100 の msleep で while(1) で task_struct をチェックすることをテストしたことですか? どんな助けでも大歓迎です。
アプリがモジュール ("/dev/driver") のファイル記述子を閉じているときに、アプリケーションの pid を受け取ることができれば、部分的にはうれしいです。
ありがとう!