psコマンドと/proc
プロセスの状態を出力するコマンドとしてps
コマンドがある。
user-name:~$ ps aux | head -n 5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 1.5 169084 7752 ? Ss 2021 6:40 /lib/systemd/systemd --system --deserialize 57 root 2 0.0 0.0 0 0 ? S 2021 0:01 [kthreadd] root 3 0.0 0.0 0 0 ? I< 2021 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< 2021 0:00 [rcu_par_gp]
このps
コマンドは/proc
ディレクトリ(Ubuntu 20.04.2 LTS
でのお話)にあるプロセスに関する詳細情報を表示している。
user-name:~$ ls /proc 1 1058115 1198997 1200722 17 1923203 1924214 202960 222650 2687863 4 498 69 730 81 90 983526 devices iomem kpagecount mtrr slabinfo tty 10 1058173 1199055 1200878 1770802 1923446 1924240 203995 222651 28568 493837 499 70 738 83 91 acpi diskstats ioports kpageflags net softirqs uptime 101 1059267 1199056 13 179808 1923447 1925556 2047927 222652 28919 493920 500 71 74 84 983405 buddyinfo dma irq loadavg pagetypeinfo stat version 1029132 1059378 1199094 14 18 1923486 1925835 21 2269388 3 494054 501 714 745 845 983416 bus driver kallsyms locks partitions swaps version_signature 104 1059396 1199100 1424914 1882798 1923487 193 215 23 30187 494486 570584 717 75 85 983430 cgroups execdomains kcore mdstat pressure sys vmallocinfo 1048436 1059402 1199316 15 1882837 1923999 2 2183903 23799 30367 494509 570622 718 756 86 983452 cmdline fb key-users meminfo sched_debug sysrq-trigger vmstat 1055526 11 1199389 152 1882856 1924048 20 22 255 3059444 494729 6 72 76 87 983522 consoles filesystems keys misc schedstat sysvipc zoneinfo 1055528 117 1199409 154 19 1924068 202935 222644 256 3211724 494730 606513 725 77 88 983523 cpuinfo fs kmsg modules scsi thread-self 1055529 1198994 12 16 1923161 1924167 202957 222646 2626495 3280889 497 664528 73 80 9 983524 crypto interrupts kpagecgroup mounts self timer_list
/proc
配下の数字が付いているディレクトリは実行中のプロセス番号と一致しており、これらのディレクトリはプロセスの生成によって作成されている。
/proc
は仮想的なファイルシステムの1つで各プロセスの詳細情報がファイルとして見られるように、カーネルが動的に作り出したファイルシステム。
例えば、PIDが1925556
のgoのserverプロセスのディレクトリにはさらに以下のようなファイルがある。
user-name:~$ sudo ls /proc/1925556 [sudo] password for hysrtr: arch_status auxv cmdline cpuset exe gid_map loginuid mem mountstats numa_maps oom_score_adj personality sched setgroups stack status timers wchan attr cgroup comm cwd fd io map_files mountinfo net oom_adj pagemap projid_map schedstat smaps stat syscall timerslack_ns autogroup clear_refs coredump_filter environ fdinfo limits maps mounts ns oom_score patch_state root sessionid smaps_rollup statm task uid_map
各ディレクトリにプロセスに関する情報が含まれており、例えばcmdline
にはプロセスを開始したコマンドがフルパスで記述されている。
user-name:~$ sudo cat /proc/1925556/cmdline goruncmd/main.go