1. ホーム
  2. c

[解決済み] なぜfor_each_processはすべてのタスクを表示しないのですか?

2022-02-17 01:13:39

質問

の各プロセスをループさせようとしています。 /proc のカーネルモジュール)。 /fs/proc ). 問題は、ルート・ネームスペースのプロセスしか表示されないことです。私はマクロを使用しようとしています for_each_process() から sched.h .

と入力することができます。 ps をシェルで実行すると、たくさんのプロセスが表示されますが、私の for_each_process() ループに表示されません。どうしたんだ?

と関係があるのか気になるところです。 rcu_read_lock() ? をつけるのは怖いですね。 rcu_read_lock() で、どこに入れたらいいのかわからない。困ったことに ドキュメント 私が読んだところでは、プリエンプティブカーネル(私のカーネルはそうです)では rcu_read_lock() . を呼び出す必要があります。 down_read(mmap_sem) これは、スリープしてしまうのではないかと心配です。ということは rcu_read_lock() ?

解決方法は?

すべてのプロセスが表示されるはずです。このようなコードを書きました。

struct task_struct *task;

for_each_process(p) {
    printk("Task %s (pid = %d)\n",p->comm, task_pid_nr(p));
}

これは、すべてのプロセスを印刷しています。私はあなたの proc_read 関数を使用します。を貼り付けていただけますか? proc_read 関数をここに追加してください。