5

システム内のすべてのプロセスを示す proc/pid ファイルを linux-kernel が読み取る方法と場所。見つけた linux-source-2.6.31/fs/proc/ ここにファイルがありますが、本当に複雑でわかりにくいです。誰かがそれがどのように機能するかを知ることができますか?

4

3 に答える 3

8

/ procは疑似ファイルシステムであり、その内容が「実際の」ファイルではないことを意味します。代わりに、コンテンツはカーネルの内部データ構造を表しています。したがって、カーネルはそれらを読み取る必要はありません。すでにデータに直接アクセスできます。

ps/ procは、システムで実行されているプロセスを(たとえば)調べるなどのユーザーモード(つまり、非カーネル)プログラムによって使用されます。利用可能なものの多くを説明するmanページがあります。

于 2009-11-22T00:44:40.283 に答える
3

あなたは正しい場所を見ています。

具体的には、関数proc_pid_readdir()inは、ルート ディレクトリが読み取らfs/proc/base.cれるときに pid エントリのリストを埋めるために使用されます。/procその関数内のすべてのプロセスとタスクの基本的なループを確認できます。

ns = filp->f_dentry->d_sb->s_fs_info;
iter.task = NULL;
iter.tgid = filp->f_pos - TGID_OFFSET;
for (iter = next_tgid(ns, iter);
     iter.task;
     iter.tgid += 1, iter = next_tgid(ns, iter)) {
    filp->f_pos = iter.tgid + TGID_OFFSET;
    if (proc_pid_fill_cache(filp, dirent, filldir, iter) < 0) {
        put_task_struct(iter.task);
        goto out;
    }
}
于 2009-11-23T00:13:12.640 に答える
1

/ procディレクトリを見ると、システムで実行されているすべてのプロセスを一覧表示する仮想ファイルがあります。バイナリプログラムpsでさえ、実際には/procディレクトリでそのファイルを開いてprocesses/pidの一覧を出力します。

LinuxProcFsガイド プログラマーツールとしてのLinuxProcファイルシステム

于 2009-11-22T00:41:50.723 に答える