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"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

Eksterne linker