Linux カーネルで task_struct の子をトラバースし、子から情報を取得しようとしています。私はすべての情報に問題があるので、簡単にするために pid を取得するだけにしておきましょう。
これは私のコードの関連部分です。
struct list_head * p;
struct task_struct ts, *tsk;
pid_t tmp_pid;
INIT_LIST_HEAD(&ts.children);
current = tsk;
list_for_each(p, &(tsk->children)){
ts = *list_entry(p, struct task_struct, children);
tmp_pid = ts.pid;
printk("the pid is %d\n", tmp_pid);
}
問題は list_entry にあると思いますが、修正方法がわかりません。見つけることができるすべての例は、同じ方法で呼び出しているようです。
これにより、すべての子 PID が出力されますが、代わりに常に同じ数値 -17 が表示されます。これは 10^9 または 10^11 のオーダーです。
誰かがここで私を助けることができますか? コンパイルには約 30 分かかるため、さまざまなことをログに記録することは実際にはオプションではありません。