procfs
procfsã¯ãProcess Filesystem ã®ç¥ã§ãUnixç³»ã·ã¹ãã ã«ããæ¬äŒŒãã¡ã€ã«ã·ã¹ãã ãäž»ã«ããã»ã¹ã«é¢ããã«ãŒãã«æ å ±ã«ã¢ã¯ã»ã¹ããææ®µãæäŸãããprocfs ã¯å®éã®ãã¡ã€ã«ã·ã¹ãã ã§ã¯ãªãã®ã§ããã£ã¹ã¯ã¹ããŒã¹ãæ¶è²»ããªãããã¡ã¢ãªããããããããæ¶è²»ããªãã
éåžžãprocfs ã¯ç«ã¡äžãæã« /proc ãã£ã¬ã¯ããªã«ããŠã³ãããããSolarisãBSDãLinuxãAIXãQNXãªã©ã§ãµããŒããããç¹ã«Linuxã§ã¯ããã»ã¹é¢é£ä»¥å€ã®ããŒã¿ã«ãæ¡åŒµãããŠããïŒAIXã®procfsã¯LinuxããŒã¹ïŒãprocfs ã¯æ©èœãã«ãŒãã«ã¢ãŒããããŠãŒã¶ãŒã¢ãŒãã«ç§»ãããšã«éèŠãªåœ¹å²ãæãããŠãããäŸãã° GNUãããžã§ã¯ãçã® psã³ãã³ãã¯å
šãŠã®ããŒã¿ã procfs ããåŸãŠãããç¹å¥ãªã·ã¹ãã ã³ãŒã«ã䜿çšããªãã
æŽå²
[ç·šé]Tom J. Killian 㯠Version 8 Unix äžã« /proc ãå®è£
ã[1]ã1984幎6æãUSENIXã§ Processes as Files ãšããé¡ã®è«æãçºè¡šãããããã¯ãããã»ã¹ã®ãã¬ãŒã¹ãè¡ã ptrace ã·ã¹ãã ã³ãŒã«ã眮ãæããç®çã§èšèšãããã
Roger Faulkner ãš Ron Gomes 㯠V8 /proc ã SVR4 ã«ç§»æ€ãã1991幎1æãUSENIX ã§ The Process File System and Process Model in UNIX System V ãšããè«æãçºè¡šããããã® procfs 㯠psã³ãã³ãã®å®è£
ã«äœ¿ããçšåºŠã®æ©èœãæããããã«ãªã£ãããprocfså
ã®ãã¡ã€ã«ã«ã¯ read()ãwrite()ãioctl() ãšãã£ãã·ã¹ãã ã³ãŒã«ãã䜿ããªãã£ãã
Plan 9ã§å®è£ ããã procfs 㯠V8 ã®ãã®ãããã£ãšé²åããŠãããV8 ã® procfs ã§ã¯ãããããã»ã¹ã«é¢ããæ©èœã¯ã²ãšã€ã®ãã¡ã€ã«ãžã®æäœã§å®çŸãããŠãããPlan 9 ã¯ããããè€æ°ã®ãã¡ã€ã«ã«æ©èœæ¯ã«åå²ããprocfs ããããã¡ã€ã«ã·ã¹ãã ãããããã
4.4BSDã§å®è£ ããã procfs ã¯ããã»ã¹æ¯ã®ãµããã£ã¬ã¯ããªããããããã»ã¹ã®ã¡ã¢ãªãã¬ãžã¹ã¿ãçŸåšã¹ããŒã¿ã¹ã«ã¢ã¯ã»ã¹ããããšãã§ãããSolaris 2.6 ã® procfs ãããã»ã¹æ¯ã®ãã£ã¬ã¯ããªããããå¶åŸ¡çšã® ctl ãã¡ã€ã«ãçšæããããã¬ãŒã¹ãããã»ã¹æ¯ã®æäœãã§ããããã«ãªã£ãŠããã
Linux
[ç·šé]Linux ã§ã¯ãprocfs ã¯åäœäžããã»ã¹ã«é¢ããæ
å ±ã /proc/PID ãšãããã£ã¬ã¯ããªã§æäŸãã以äžã®ãããªæ
å ±ãæäŸããã
/proc/PID/cmdline- ãã®ããã»ã¹ãèµ·åããéã®ã³ãã³ãè¡æåå/proc/PID/cwd- ãã®ããã»ã¹ã®ã«ã¬ã³ããã£ã¬ã¯ããªãžã®ã·ã³ããªãã¯ãªã³ã¯/proc/PID/environ- ãã®ããã»ã¹ã®èšå®ããŠããç°å¢å€æ°ãšãã®äžèº«/proc/PID/exe- å ã ã®å®è¡ãã¡ã€ã«ãžã®ã·ã³ããªãã¯ãªã³ã¯ïŒããããã°ãããã»ã¹ã¯å ã ã®å®è¡ãã¡ã€ã«ãåé€/ç§»åãããåŸãåäœãç¶ããããšãããïŒ/proc/PID/fd- ãªãŒãã³ããŠãããã¡ã€ã«èšè¿°åã«å¯Ÿå¿ããã·ã³ããªãã¯ãªã³ã¯çŸ€ã®ãããã£ã¬ã¯ããª/proc/PID/fdinfo- ãªãŒãã³ããŠãããã¡ã€ã«èšè¿°åã«å¯Ÿå¿ãããã¡ã€ã«ã®äœçœ®ããã©ã°ãèšãããã¡ã€ã«çŸ€ããããã£ã¬ã¯ããª/proc/PID/root- ãã®ããã»ã¹ã«ãšã£ãŠã®ã«ãŒããã£ã¬ã¯ããªãžã®ã·ã³ããªãã¯ãªã³ã¯ãé垞㯠/ ã ããchrootããŠããå Žåã¯ç°ãªãã/proc/PID/stat- ããã»ã¹ã®ç¶æ ã«ã€ããŠã®æ å ±ïŒ40å以äžã®å€ãå«ããpsã³ãã³ãã¯ãã®ãã¡ã€ã«ããæ å ±ãåŸãŠããïŒ/proc/PID/status- ããã»ã¹ã®åäœç¶æ ãã¡ã¢ãªäœ¿çšç¶æ³ã«ã€ããŠã®åºæ¬æ å ±/proc/PID/task- ãã®ããã»ã¹ã芪ããã»ã¹ãšããŠããå šããã»ã¹ãžã®ããŒããªã³ã¯ãæ ŒçŽãããã£ã¬ã¯ããª/proc/PID/maps- ãã®ããã»ã¹ã®ä»®æ³ã¢ãã¬ã¹ç©ºéã®ãããã³ã°ç¶æ³ïŒã¢ãã¬ã¹ç¯å²ãšãããã³ã°ãããŠãããªãœãŒã¹ïŒ
ç¹å®ã®ããã»ã¹ã®PIDã¯ãpgrepãpidofãps ãšãã£ããŠãŒãã£ãªãã£ã§åŸãããã
$ ls -l /proc/$(pgrep -n python)/fd # æè¿èµ·åããã `python' ãšããããã»ã¹ã®å
šãã¡ã€ã«èå¥åãäžèŠ§è¡šç€º
samtala 0
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 0 -> /dev/pts/3
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 1 -> /dev/pts/3
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 2 -> /dev/pts/3
$ readlink /proc/$(pgrep -n python)/exe # æè¿èµ·åããã `python' ãšããããã»ã¹ã®å®è¡ãã¡ã€ã«ã®ãã¹åã衚瀺
/usr/bin/python3.1
procfs ã§ã¯åã
ã®ããã»ã¹ãšã¯çŽæ¥é¢ä¿ããªãã·ã¹ãã æ
å ±ãæäŸããããLinuxã«ãŒãã« 2.6 ã§ã¯å€§éšåãå¥ã®æ¬äŒŒãã¡ã€ã«ã·ã¹ãã sysfs ã«åé¢ç§»åãããŠããïŒ/sys ã«ããŠã³ããããïŒã
/proc/acpiãŸãã¯/proc/apm- ãã¯ãŒãããžã¡ã³ãé¢é£æ å ±/proc/buddyinfo- ããã£ãããã¯ã»ã¢ã«ãŽãªãºã ã«é¢ããæ å ±[2]/proc/bus- PCI/USBãªã©ã®æ å ±ã/sys/busã®æ¹ãæ å ±ãè±å¯ã/proc/fb- å©çšå¯èœãªãã¬ãŒã ãããã¡ã®äžèЧ/proc/cmdline- ã«ãŒãã«ã«æž¡ãããããŒããªãã·ã§ã³æåå/proc/cpuinfo- CPUã«é¢ããæ å ±ïŒãã³ããŒãCPUãã¡ããªãæ©çš®ãã¯ããã¯åšæ³¢æ°ããã£ãã·ã¥ãµã€ãºãã³ã¢æ°ãªã©ïŒ[3]ãBogoMipsã®å€ãããããå®éã®æ§èœãåæ ããŠãããšã¯èšããªãã/proc/devices- ã¡ãžã£ãŒããã€ã¹çªå·ãšããã€ã¹ã°ã«ãŒãã®äžèЧ/proc/diskstats- åè«çãã£ã¹ã¯ããã€ã¹ã®çµ±èšæ å ±/proc/filesystems- ã«ãŒãã«ããµããŒãããŠãããã¡ã€ã«ã·ã¹ãã ã®äžèЧ/proc/interrupts,/proc/iomem,/proc/ioports,/proc/irq- åçš®ã·ã¹ãã è³æºã«ã€ããŠã®è©³çްæ å ±/proc/meminfo- ã¡ã¢ãªäœ¿çšç¶æ³ã®æŠèŠæ å ±/proc/modules- çŸåšããŒããããŠããã«ãŒãã«ã¢ãžã¥ãŒã«ã«é¢ããæ å ±/proc/mounts- çŸåšããŠã³ããããŠããããã€ã¹ãšããŠã³ããã€ã³ãã®äžèЧïŒ/proc/self/mounts ãžã®ã·ã³ããªãã¯ãªã³ã¯ïŒ/proc/net- ãããã¯ãŒã¯ã®ãããã³ã«ã¹ã¿ãã¯ã«é¢ããæ å ±/proc/partitions- ååšããããŒãã£ã·ã§ã³ã«ã€ããŠã®åçš®æ å ±/proc/scsi- SCSIãŸãã¯RAIDã³ã³ãããŒã©ã§æ¥ç¶ãããŠããããã€ã¹ã«é¢ããæ å ±/proc/self- çŸåšåäœäžã®ããã»ã¹ïŒ/procãèŠãŠããããã»ã¹ïŒã®/proc/PID/ãžã®ã·ã³ããªãã¯ãªã³ã¯/proc/swaps- 䜿çšäžã®ã¹ã¯ããé åã®äžèЧ/proc/sys- åçã«å€æŽå¯èœãªã«ãŒãã«ãªãã·ã§ã³ãžã®ã¢ã¯ã»ã¹ãæäŸã/proc/sysvipc- å ±æã¡ã¢ãªãªã©IPCã«é¢ããæ å ±/proc/tty- ïŒæ¬äŒŒïŒç«¯æ«ã«é¢ããæ å ±/proc/uptime- ã·ã¹ãã èµ·åããã®æéãšã¢ã€ãã«ç¶æ ã ã£ãæéïŒç§ïŒ/proc/version- ã«ãŒãã«ã®ããŒãžã§ã³çªå·ãïŒã«ãŒãã«ãã«ãã«äœ¿ãããïŒgccã®ããŒãžã§ã³çªå·ãªã©
procfs ã䜿çšãã Linux äžã®ãŠãŒãã£ãªãã£ã¯ procps ããã±ãŒãžã«åããããŠãããå©çšããã«ã¯ procfs ã /proc ã«ããŠã³ããããŠããªããã°ãªããªãã
*BSD
[ç·šé]- FreeBSD åã³ OpenBSD ã§ã¯ããã©ã«ãã§ procfs ã¯ããŠã³ããããªã[4]ã
- NetBSD åã³ DragonFlyBSD ã§ã¯ããŠã³ãããããããã¡ã€ã«æ§é ãç°ãªãã
èæ³š
[ç·šé]- â proc(4) manual page on Version 8 Unix
- â 3.2.2. /proc/buddyinfo CentOS 5.2
- â âUnderstanding Linux /proc/cpuinfoâ. 2012幎7æ12æ¥é²èЧã
- â Why is procfs deprecated in favor of procstat?
åèæç®
[ç·šé]- Unix 8th Edition proc(2) manual page - æåã®procfs
- Plan 9 procfs manual page - Plan 9 ã§æ¡åŒµãããprocfs
- Linux Manual Pages Proc(5) Linux ã®procfsã®ããã¥ã¢ã«
- Documentation/filesystems/proc.txt procfs ã«ã€ããŠã®Linuxã«ãŒãã«ææž
å€éšãªã³ã¯
[ç·šé]- A brief history of /proc Eric Schrock's Weblog
- Access the Linux kernel using the Procfs An IBM developerWorks article by M. Tim Jones
- Linux-Filesystem-Hierarchy Linux Documentation Project
- Creating and using proc files - an article from the Real-Time Embedded blog
- Using the proc filesystem An article by Pétur I. Egilsson