Profs - procfs
Den proc filsystemet ( procfs ) er en spesiell filsystem i Unix-lignende operativsystemer som presenterer informasjon om prosesser og annen systeminformasjon på en hierarkisk fil-liknende struktur, som gir en mer praktisk og standardisert metode for dynamisk å få tilgang til prosess dataene holdt i kjernen enn tradisjonelle Tracing metoder eller direkte tilgang til kernel minne. Vanligvis blir den kartlagt til et monteringspunkt som heter /proc ved oppstart. Proc -filsystemet fungerer som et grensesnitt til interne datastrukturer om kjørende prosesser i kjernen. I Linux kan den også brukes til å skaffe informasjon om kjernen og til å endre visse kjerneparametere ved kjøretid ( sysctl ).
Mange Unix-lignende operativsystemer støtter proc-filsystemet, inkludert Solaris , IRIX , Tru64 UNIX , BSD , Linux , IBM AIX , QNX og Plan 9 fra Bell Labs . OpenBSD droppet støtten i versjon 5.7, utgitt i mai 2015.
Den Linux-kjernen strekker det til ikke-prosessrelaterte data.
Proc -filsystemet gir en kommunikasjonsmetode mellom kjerneplass og brukerplass . For eksempel bruker GNU -versjonen av prosessrapporteringsverktøyet ps proc -filsystemet for å hente dataene sine, uten å bruke spesialiserte systemanrop .
Historie
UNIX 8. utgave
Tom J. Killian implementerte UNIX 8. utgave (V8) versjon av /proc : han presenterte et papir med tittelen "Prosesser som filer" på USENIX i juni 1984. Utformingen av profiler hadde som mål å erstatte ptrace -systemanropet som ble brukt til prosesssporing. Detaljert dokumentasjon finner du på proc (4) manualsiden .
SVR4
Roger Faulkner og Ron Gomes overførte V8 /proc til SVR4 , og publiserte et papir som heter "The Process File System and Process Model in UNIX System V" på USENIX i januar 1991. Denne typen prosjekter støttet opprettelsen av ps , men filene kunne bare tilgjengelig med funksjonene read () , write () og ioctl () . Mellom 1995 og 1996 opprettet Roger Faulkner grensesnittet procfs-2 for Solaris-2.6 som tilbyr et strukturert /proc-filsystem med underkataloger.
Plan 9
Plan 9 implementerte et prosessfilsystem, men gikk lenger enn V8. V8s prosessfilsystem implementerte en enkelt fil per prosess. Plan 9 opprettet et hierarki med separate filer for å tilby disse funksjonene, og gjorde /proc en virkelig del av filsystemet.
4.4BSD
4.4BSD klonet implementeringen av /proc fra Plan 9. Fra februar 2011 ble prosjekter gradvis under utfasing i FreeBSD, og vendte seg til å bruke sysctl i stedet for prosessrelatert informasjon. Den ble fjernet fra OpenBSD i versjon 5.7, som ble utgitt i mai 2015, fordi den "alltid led av løpsforhold og nå er ubrukt". macOS implementerte ikke prosjekter og brukerplassprogrammer må bruke sysctl -grensesnitt for prosessdata.
For å gi binær kompatibilitet med Linux -brukerplassprogrammer , gir FreeBSD -kjernen også linprofiler som ligner på Linux -produktene.
Solaris
/proc i Solaris var tilgjengelig fra begynnelsen. Solaris 2.6 i 1996 introduserte procfs2 fra Roger Faulkner.
Linux
Linux la først til et /proc-filsystem i v0.97.3 , september 1992, og begynte først å utvide det til ikke-prosessrelaterte data i v0.98.6, desember 1992.
Fra og med 2020 inkluderer Linux -implementeringen en katalog for hver kjørende prosess, inkludert kjerneprosesser , i kataloger som heter /proc /PID , der PID er prosessnummeret. Hver katalog inneholder informasjon om en prosess, inkludert:
- /proc/PID/cmdline , kommandoen som opprinnelig startet prosessen.
- /proc/PID/cwd , en symlink til den nåværende arbeidskatalogen for prosessen.
- /proc/PID/environment inneholder navn og verdier på miljøvariablene som påvirker prosessen.
- /proc/PID/exe , en symlink til den opprinnelige kjørbare filen , hvis den fortsatt eksisterer (en prosess kan fortsette å kjøre etter at den opprinnelige kjørbare filen er slettet eller erstattet).
- /proc/PID/fd , en katalog som inneholder en symbolsk lenke for hver åpen filbeskrivelse .
- /proc/PID/fdinfo , en katalog som inneholder oppføringer som beskriver posisjonen og flaggene for hver åpen filbeskrivelse.
- /proc/PID/maps , en tekstfil som inneholder informasjon om kartlagte filer og blokker (som haug og stabel).
- /proc/PID/mem , et binært bilde som representerer prosessens virtuelle minne , kan bare nås av en sporingsprosess .
- /proc/PID/root , en symlink til rotbanen sett av prosessen. For de fleste prosesser vil dette være en lenke til / med mindre prosessen kjøres i et chroot -fengsel .
- /proc/PID/status inneholder grunnleggende informasjon om en prosess, inkludert driftstilstand og minnebruk.
- /proc/PID/task , en katalog som inneholder harde lenker til alle oppgaver som har blitt startet av denne (dvs. overordnede) prosessen.
(Brukere kan få PID med et verktøy som pgrep , pidof eller ps :
$ ls -l /proc/$(pgrep -n python3)/fd # List all file descriptors of the most recently started `python3' process
total 0
lrwx------ 1 baldur baldur 64 2020-03-18 12:31 0 -> /dev/pts/3
lrwx------ 1 baldur baldur 64 2020-03-18 12:31 1 -> /dev/pts/3
lrwx------ 1 baldur baldur 64 2020-03-18 12:31 2 -> /dev/pts/3
$ readlink /proc/$(pgrep -n python3)/exe # List executable used to launch the most recently started `python3' process
/usr/bin/python3.8
)
/proc inkluderer også ikke-prosessrelatert systeminformasjon, selv om mye av informasjonen i 2.6-kjernen flyttet til et eget pseudo-filsystem, sysfs , montert under /sys :
- avhengig av modus for strømstyring (hvis i det hele tatt), enten katalog, /proc /acpi eller /proc /apm , som er forut for sysfs og inneholder forskjellige biter av informasjon om tilstanden for strømstyring.
- / proc / buddyinfo , informasjon om buddy algoritme som håndterer minne fragmentering.
- /proc /bus , som inneholder kataloger som representerer forskjellige busser på datamaskinen, for eksempel PCI / USB . Dette har i stor grad blitt erstattet av sysfs under /sys /buss som er langt mer informativ.
- /proc/fb , en liste over tilgjengelige rammebuffere
- /proc/cmdline , og gir oppstartsalternativene videre til kjernen
- /proc/cpuinfo , som inneholder informasjon om CPU -en , for eksempel leverandøren (og CPU -familien, modell- og modellnavn som skal tillate brukere å identifisere CPU -en) og dens hastighet (CPU -klokkehastighet ), bufferstørrelse, antall søsken, kjerner, og CPU -flagg . /proc/cpuinfo inkluderer en verdi for " bogomips ", ofte misforstått som et mål på CPU-hastighet, som en referanse, men den måler faktisk ingen fornuftig (for sluttbrukere) verdi i det hele tatt. Det forekommer som en bivirkning av kjernetimerkalibrering og gir svært varierende verdier avhengig av CPU-type, selv ved like klokkehastigheter.
$ cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 6
model name : AMD Athlon(tm) II X2 270 Processor
stepping : 3
microcode : 0x10000c8
cpu MHz : 2000.000
cache size : 1024 KB
...
processor : 1
vendor_id : AuthenticAMD
cpu family : 16
model : 6
model name : AMD Athlon(tm) II X2 270 Processor
stepping : 3
microcode : 0x10000c8
cpu MHz : 800.000
cache size : 1024 KB
...
På flerkjernede CPUer inneholder /proc /cpuinfo feltene for "søsken" og "cpu-kjerner" som representerer følgende beregning:
"siblings" = (HT per CPU package) * (# of cores per CPU package) "cpu cores" = (# of cores per CPU package)
En CPU -pakke betyr fysisk CPU som kan ha flere kjerner ( én kjerne for en, to kjerner for to, firekjerne for fire). Dette tillater et skille mellom hyper-threading og dual-core, det vil si at antallet hyper-tråder per CPU-pakke kan beregnes av søsken / CPU-kjerner . Hvis begge verdiene for en CPU-pakke er like, støttes ikke hypertråd. For eksempel er en CPU-pakke med søsken = 2 og "cpu cores" = 2 en dual-core CPU, men støtter ikke hyper-threading.
- /proc/crypto , en liste over tilgjengelige kryptografiske moduler
- /proc /devices , en liste over tegn- og blokkeringsenheter sortert etter enhets -ID, men også hoveddelen av /dev -navnet
- /proc/diskstats , og gir litt informasjon (inkludert enhetsnumre) for hver av de logiske diskene
- /proc/filesystems , en liste over filsystemene som støttes av kjernen på tidspunktet for oppføringen
- /proc/avbryter , /proc/iomem , /proc/ioports og katalogen /proc/irq , og gir noen detaljer om enhetene (fysiske eller logiske) ved hjelp av de forskjellige systemressursene
- /proc/kmsg , og holder meldinger sendt ut av kjernen
- /proc/meminfo , som inneholder en oppsummering av hvordan kjernen administrerer minnet.
- /proc /modules , en av de viktigste filene i /proc , som inneholder en liste over kjernemodulene som for øyeblikket er lastet inn. Det gir en indikasjon (ikke alltid helt korrekt) på avhengigheter.
- /proc/mounts , en symlink til self/mounts som inneholder en liste over enhetene som er montert og deres monteringspunkter (og hvilket filsystem som er i bruk og hvilke monteringsalternativer som er i bruk).
- /proc/net/ , en katalog som inneholder nyttig informasjon om nettverksstakken, spesielt /proc/net/nf_conntrack , som viser eksisterende nettverkstilkoblinger (spesielt nyttig for sporing av ruting når iptables FORWARD brukes til å omdirigere nettverkstilkoblinger)
- /proc /partisjoner , en liste over enhetsnumre, deres størrelse og /dev- navn som kjernen har identifisert som eksisterende partisjoner
- /proc/scsi , og gir informasjon om alle enheter som er koblet til via en SCSI- eller RAID -kontroller
- en symbolsk kobling til den gjeldende (tverrgående) prosess ved / proc / selv (dvs. / proc / PID / hvor PID er det av den aktuelle prosessen).
- /proc/slabinfo , som viser statistikk over hurtigbuffer for ofte brukte objekter i Linux-kjernen
- /proc/swaps , en liste over de aktive byttepartisjonene, deres forskjellige størrelser og prioriteringer
- Tilgang til dynamisk konfigurerbare kjernealternativer under /proc /sys . Under /proc /sys vises kataloger som representerer kjerneområdene, som inneholder lesbare og skrivbare virtuelle filer .
For eksempel er en vanlig referert virtuell fil /proc/sys/net/ipv4/ip_forward , fordi den er nødvendig for å dirigere brannmurer eller tunneler. Filen inneholder enten en '1' eller en '0': hvis den er 1, videresender IPv4 -stakken pakker som ikke er ment for den lokale verten, hvis den er 0, gjør den det ikke. - /proc/sysvipc , som inneholder minne-deling og kommunikasjon mellom prosesser (IPC).
- /proc/tty , som inneholder informasjon om de nåværende terminalene; /proc/tty/driver ser ut til å være en liste over de forskjellige typene tty tilgjengelig - som hver er en liste over de av hver type
- /proc/oppetid , hvor lenge kjernen har kjørt siden oppstart og brukt i inaktiv modus (begge i sekunder)
- /proc/versjon , som inneholder Linux -kjerneversjonen, distribusjonsnummeret, gcc -versjonsnummeret (brukes til å bygge kjernen) og annen relevant informasjon knyttet til versjonen av kjernen som for øyeblikket kjører
- andre filer avhengig av forskjellig maskinvare, modulkonfigurasjoner og endringer i kjernen.
De grunnleggende verktøyene som bruker /proc under Linux kommer i pakken procps ( /proc prosesser), og fungerer bare i forbindelse med en montert /proc .
CYGWIN
Cygwin implementerte en procfs som i utgangspunktet er den samme som Linux -profeten.
Eiendomsutvidelser
Flere selskaper og prosjekter la til tilleggsfunksjoner til /proc for systemene sine, f.eks. /Proc /lcd , kan være en fil som inneholder innholdet på frontpanelets LCD-skjerm. Tekst skrevet til denne filen vil bli vist på skjermen.
Referanser
- Unix 8th Edition proc (2) manuell side - Beskrivelse av de originale produktene.
- Plan 9 skaffer manuell side - Plan 9 utvider konseptkonseptet sterkt, og gir et mye utvidet grensesnitt for å kontrollere og manipulere prosesser.
- Linux Manual Pages Proc (5) Linux manuell dokumentasjon for prosjekter
- Dokumentasjon/filsystemer/proc.txt Linux -kjernedokumentasjon for proff
Eksterne linker
- En kort historie om /proc Eric Schrock's Weblog
- Få tilgang til Linux -kjernen ved å bruke Procfs An IBM developerWorks -artikkelen av M. Tim Jones
- Linux-filsystem-hierarki Linux dokumentasjonsprosjekt
- Oppdag mulighetene for /proc -katalogen av Federico Kereki