3

たぶん私はこれについて間違っているだけです。

Linuxモジュール(Ubuntu 12.04)があり、各プロセスが開いているファイルの数など、現在のプロセスに関する情報を収集する必要があります。これを行う最良の方法は、モジュールが/ procを読み取り、そこに表されている各プロセスについて、/procサブディレクトリで必要な情報を探すことだと思いました。

明らかに、私のモジュールはopendir/readdirを呼び出すことができません。カーネル空間から使えるproc_readdir()があると思っていたのですが、情報が見つからないようです。

私は何かが足りないのですか?モジュールがプロセス情報を収集するためのより良い方法はありますか?proc_readdir()の場合、その例はどこにありますか?

4

1 に答える 1

4

カーネル空間プログラミングに移行するだけの場合は、正しい方法で物事を行うことに慣れるのにかなりの時間がかかる場合があります。/ procは、カーネル空間のデータ構造への単なるインターフェースであり、不便なものです(すべてのASCIIはどうなるでしょう)。カーネルを使用しているため、必要なデータに直接アクセスできます。

プロセスのtask_structエントリを確認する必要があります(http://lxr.linux.no/linux+v3.5.3/include/linux/sched.hを参照)。各プロセスを繰り返し処理する場合は、次のようにしてみてください。

struct task_struct *task;
for_each_process(task) {
    printk(KERN_INFO "Process %i is named %s\n", task->pid, task->comm); 
}

を使用してpidで特定のタスクを見つけることもできfind_task_by_pid_nsますが、pid名前空間について心配する必要があります。get_current現在実行中のタスクを見つける、もあります。

于 2012-09-10T08:56:40.223 に答える