/procとは
Linuxには、/procというディレクトリがあります。このディレクトリの中のファイルはLinuxカーネルが内部情報を提供するための仮想的なもです。SSD上のファイルのように、どこかにファイルの実体があるわけではありません。ディレクトリ内容の例
実際に見てみると以下のようになっています。lsに-Fオプションをつけてあるので、 末尾に/があるものはディレクトリ、@があるのは、シンボリックリンクです。$ ls -F /proc/ 1/ 73669/ crypto irq/ modules sys/ 3674/ 73681/ devices kallsyms mounts@ sysrq-trigger 3675/ 73687/ diskstats kcore mtrr sysvipc/ 38/ 91/ dma keys net@ thread-self@ 4771/ 92/ driver/ key-users pagetypeinfo timer_list 4777/ acpi/ dynamic_debug/ kmsg partitions tty/ 4778/ asound/ execdomains kpagecgroup pressure/ uptime 61/ buddyinfo fb kpagecount schedstat version 72/ bus/ filesystems kpageflags self@ vmallocinfo 73/ cgroups fs/ loadavg slabinfo vmstat 73632/ cmdline interrupts locks softirqs zoneinfo 73638/ consoles iomem meminfo stat 73639/ cpuinfo ioports misc swaps一見して分かるように、数字だけのディレクトリ(例: 1/, 3674/など)と、それ以外のファイルやディレクトリ(例: acpi/, buddyinfoなど)があります。 数字のディレクトリは、その値のプロセス番号をもつプロセスの情報をそのディレクトリ以下にファイルとして持ちます。 それ以外のファイルやディレクトリ(以下のファイル)には、システム全体の情報が格納されています。
プロセス用のディレクトリ
いま、例としてsleepコマンドを実行させ、プロセスを起動します。 プロセスID 73717で起動しました。$ sleep 3600 & [1] 73717このプロセスに関する/procの情報を見てみましょう。
$ ls -F /proc/73717/ arch_status fd/ net/ setgroups attr/ fdinfo/ ns/ smaps autogroup gid_map numa_maps smaps_rollup auxv io oom_adj stack cgroup ksm_merging_pages oom_score stat clear_refs ksm_stat oom_score_adj statm cmdline limits pagemap status comm loginuid patch_state syscall coredump_filter map_files/ personality task/ cpu_resctrl_groups maps projid_map timens_offsets cpuset mem root@ timers cwd@ mountinfo sched timerslack_ns environ mounts schedstat uid_map exe@ mountstats sessionid wchanいろんなファイルやディレクトリがありますが、筆者がよく参照するものを2つここではあげます。
exe
そのプロセスの実行ファイルへのリンクです。プロセスの実行ファイルは/usr/bin/sleep であることが分かります。$ ls -l /proc/73717/exe lrwxrwxrwx 1 foo foo 0 Mar 19 11:06 /proc/73717/exe -> /usr/bin/sleep
fd
そのプロセスがオープンしているファイルへのシンボリックリンクが格納されています。 シンボリックリンクのファイル名はデスクリプタ番号です。 この場合、標準入出力のためのファイル3つがオープンしていることが分かります。$ ls -l /proc/73717/fd total 0 lrwx------ 1 foo foo 64 Mar 19 11:15 0 -> /dev/pts/5 lrwx------ 1 foo foo 64 Mar 19 11:15 1 -> /dev/pts/5 lrwx------ 1 foo foo 64 Mar 19 11:15 2 -> /dev/pts/5
システム全体の情報
システム全体のファイルについても、3つ紹介します。partitions
Linuxカーネルが認識しているパーティションが格納されています。以下ではNVMeのストレージのパーティションが表示されいてます。 USBストレージを挿入するとsda, sda1, sda2など、USBストレージに対応する項目が追加されます。Linuxカーネルが 接続したストレージを認識しているかを確認するときに有用です。$ cat /proc/partitions major minor #blocks name 259 0 1953514584 nvme0n1 259 1 498688 nvme0n1p1 259 2 19530752 nvme0n1p2 259 3 19530752 nvme0n1p3 259 4 19530752 nvme0n1p4 259 5 19530752 nvme0n1p5 259 6 1874891776 nvme0n1p6
uptime
Linuxが起動してからの時間が格納されています。$ uptime 11:22:23 up 9:19, 2 users, load average: 0.00, 0.00, 0.00
self
あるプロセスがこのファイルを参照する時、それは、そのプロセス用ディレクトリへのリンクになっています。つまり、読み出すプロセスによって異なるリンク先を示します。
以下の例では、リンク先になっている73729は、/procを読み出しているlsコマンド自身のプロセスIDを持つディレクトリです。
$ ls -l /proc/self lrwxrwxrwx 1 root root 0 Mar 19 02:02 /proc/self -> 73729
0 件のコメント:
コメントを投稿