Master Linux-prosesser med ps-kommandoen: En komplett guide

Få en oversikt over prosessene som kjører på din Linux-maskin ved hjelp av `ps`-kommandoen. Identifiser prosesser basert på navn, bruker eller terminal, med detaljnivået du selv ønsker. Her får du en innføring i hvordan du går frem.

Prosessadministrasjon i Linux

Kjernen er den sentrale delen av alle Linux- og Unix-baserte operativsystemer. En av dens mange oppgaver er å fordele systemressurser som RAM og CPU-tid. Dette må administreres i sanntid for å sikre at alle aktive prosesser får sin rettferdige andel, basert på prioriteten til hver enkelt oppgave.

Noen ganger kan oppgaver fryse, havne i en endeløs loop, eller av andre grunner slutte å reagere. Eller de kan fortsette å kjøre, men forbruke for mye CPU-tid eller RAM, eller oppføre seg uønsket på andre måter. I noen tilfeller må oppgaver avsluttes for å unngå problemer. Det første skrittet er å identifisere den aktuelle prosessen.

Men det kan også være at du ikke har noen problemer med oppgaver eller ytelse. Kanskje du bare er nysgjerrig på hvilke prosesser som er aktive på maskinen din, og vil ta en titt under overflaten. `ps`-kommandoen tilfredsstiller begge disse behovene. Den gir deg et direkte bilde av hva som skjer i datamaskinen i øyeblikket.

`ps` er fleksibel nok til å gi deg nøyaktig den informasjonen du trenger, i det formatet du ønsker. `ps` har mange ulike alternativer. Alternativene som beskrives her, vil dekke de fleste vanlige behov. Om du trenger å dykke dypere inn i `ps` enn det vi gjør her, vil du finne at vår introduksjon gjør manualen enklere å forstå.

Visning av prosesser

Den enkleste måten å bruke `ps` på er å starte den uten noen parametere:

ps

`ps` viser en liste over prosessene som er startet av brukeren som kjørte kommandoen.

De fire kolonnene viser følgende:

PID: Prosessens ID-nummer.
TTY: Navnet på terminalen som brukeren er logget inn på.
TID: Mengden CPU-tid prosessen har brukt.
CMD: Navnet på kommandoen som startet prosessen.

Visning av prosesser for alle brukere

Ved å legge til `-e` (velg alle prosesser) kan vi få `ps` til å vise prosesser startet av alle brukere, ikke bare brukeren som kjører `ps`-kommandoen. Da dette kan gi en lang liste, legger vi den inn i `less`.

ps -e | less

Prosesslisten sendes til `less`.

Vi får mange flere oppføringer i listen, men ser de samme fire kolonnene som før. Oppføringene med spørsmålstegn `?` i `TTY`-kolonnen ble ikke startet fra et terminalvindu.

Visning av prosesshierarki

Noen ganger kan det være nyttig å finne et problem eller identifisere en spesifikk prosess ved å se hvilke prosesser som startet andre prosesser. Vi bruker `-H` (hierarki)-alternativet for å gjøre dette.

ps -eH | less

Innrykk viser hvilke prosesser som er foreldre til andre prosesser.

For å gjøre det enda tydeligere kan vi be `ps` legge til noen ASCII-linjer og vise hierarkiet som et tre. Alternativet for å gjøre dette er `–forest`-alternativet.

ps -eH --forest | less

Dette gjør det enklere å se hvilke prosesser som er foreldre til andre prosesser.

Visning av prosesser etter navn

Du kan sende utdata fra `ps` gjennom `grep` for å finne oppføringer som inneholder et bestemt søkeord. Her ser vi etter oppføringer som inneholder søkeordet «firefox»:

ps -e | grep firefox

I dette tilfellet er utdataene en enkelt oppføring for prosessen vi er interessert i. Hadde vi startet flere forekomster av Firefox, ville vi fått flere treff.

Visning av flere kolonner i utdata

For å legge til flere kolonner i utdata, bruk `-f` (fullformat)-alternativet.

ps -ef | less

Et ekstra sett med kolonner er inkludert i utdataene fra `ps`.

Kolonnene er:

UID: Bruker-IDen til eieren av denne prosessen.
PID: Prosess-IDen til prosessen.
PPID: Overordnet prosess-ID for prosessen.
C: Antall barn prosessen har.
TID: Starttidspunktet.
TTY: Navnet på terminalen som brukeren er logget inn på.
TID: Mengden CPU-tid prosessen har brukt.
CMD: Navnet på kommandoen som startet prosessen.

Ved å bruke `-F` (ekstra fullformat)-alternativet kan vi få enda flere kolonner:

ps -eF | less

Kolonnene vi får denne gangen krever at skjermen rulles sidelengs for å se alle.

Ved å trykke på «høyre pil»-tasten flyttes skjermen mot venstre.

Kolonnene vi nå får er:

UID: Bruker-IDen til eieren av denne prosessen.
PID: Prosess-IDen til prosessen.
PPID: Overordnet prosess-ID for prosessen.
C: Antall barn prosessen har.
SZ: Størrelse i RAM-sider av prosessbildet.
RSS: Resident set size. Det ikke-byttede fysiske minnet som brukes av prosessen.
PSR: Prosessoren som prosessen er tildelt.
TID: Starttidspunktet.
TTY: Navnet på terminalen som brukeren er logget inn på.
TID: Mengden CPU-tid prosessen har brukt.
CMD: Navnet på kommandoen som startet prosessen.

Visning av prosesser etter prosess-ID

Når du har funnet prosess-ID-en til prosessen du er interessert i, kan du bruke den med `ps`-kommandoen for å se detaljene for den prosessen. Bruk `-p` (velg etter prosess-ID)-alternativet for å oppnå dette:

ps -p 3403

Detaljene for denne prosessen vises:

Du er ikke begrenset til en enkelt prosess-ID. Du kan gi en liste over prosess-ID-er, atskilt med mellomrom.

Visning av prosesser etter kommando

`-C` (kommando)-alternativet lar deg søke etter en prosess ved å bruke kommandonavnet. Det vil si navnet på kommandoen som startet prosessen. Dette er litt forskjellig fra kommandolinjen, som kan inkludere banenavn, parametere eller andre alternativer.

ps -C shutter

Detaljene for shutter-prosessen vises.

Visning av prosesser eid av en bruker

For å se prosessene som eies av en bestemt bruker, bruk `-u` (brukerliste)-alternativet:

ps -u mary

Prosessene som eies av brukerkontoen mary vises.

Visning av prosesser etter terminal

For å se prosessene som er tilknyttet en TTY, bruk `-t` (velg etter TTY)-alternativet. Brukt uten et TTY-nummer, rapporterer `-t`-alternativet prosessene som er tilknyttet det gjeldende terminalvinduet.

tty
ps -t

tty-kommandoen rapporterer at dette er pseudo-teletype 0. Prossesene som vises av `ps -t` er alle knyttet til TTY pts/0.

Hvis vi sender et TTY-nummer på kommandolinjen, skal vi få en rapport om prosessene som er knyttet til den TTY-en.

ps -t 1

Denne gangen er alle prosessene knyttet til TTY pts/1.

Valg av kolonner som skal vises

Med `-o` (format)-alternativet kan du velge hvilke kolonner du ønsker å inkludere i utdataene fra `ps`. Du spesifiserer kolonnene ved navn. Den (lange) listen over kolonnenavn finner du i manualsiden i seksjonen med tittelen «Standard Format Specifiers». I dette eksemplet velger vi å ta med CPU-tiden (`pcpu`) og kommandolinjen med argumenter (`args`) i utdataene.

ps -e -o pcpu,args | less

Utdataene inkluderer bare de to kolonnene vi ba om.

Sortering av utdata etter kolonner

Du kan få utdataene sortert ved hjelp av `–sort`-alternativet. La oss sortere utdataene etter CPU-kolonnen:

ps -e -o pcpu,args --sort -pcpu| less

Bindestrek `-` på sorteringsparameteren `pcpu` gir en synkende sorteringsrekkefølge.

For å se de ti mest CPU-intensive prosessene, send utdataene gjennom `head`-kommandoen :

ps -e -o pcpu,args --sort -pcpu | head -10

Vi får en sortert, avkortet liste.

Hvis vi legger til flere kolonner i visningen, kan vi sortere etter flere kolonner. La oss legge til `pmem`-kolonnen. Dette er prosentandelen av maskinens minne som brukes av prosessen. Uten bindestrek, eller med pluss `+`, er sorteringsrekkefølgen stigende.

ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10

Vi får vår ekstra kolonne, og den nye kolonnen er med i sorteringen. Den første kolonnen er sortert først, og den andre kolonnen er sortert i stigende rekkefølge fordi vi ikke har satt bindestrek på `pmem`.

La oss gjøre det litt mer nyttig og legge til prosess-ID-kolonnen (`pid`) slik at vi kan se prosessnummeret for hver prosess i listen vår.

ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10

Nå kan vi identifisere prosessene.

Avslutting av prosesser etter prosess-ID

Vi har sett på flere måter å identifisere prosesser på, inkludert navn, kommando, bruker og terminal. Vi har også sett på måter å identifisere prosesser basert på dynamiske attributter som CPU-bruk og minne.

Vi har nå en oversikt over de aktive prosessene. Ved å kjenne prosess-ID-en kan vi (om nødvendig) avslutte prosesser ved hjelp av `kill`-kommandoen. Hvis vi ønsker å avslutte prosess 898, ville vi brukt denne kommandoen:

sudo kill 898

Hvis alt går bra, vil prosessen avsluttes uten videre.

Avslutting av prosesser etter navn

`pkill`-kommandoen lar deg avslutte prosesser ved navn. Pass på at du har identifisert riktig prosess! Denne kommandoen vil avslutte `top`-prosessen.

sudo pkill top

Igjen, ingen melding betyr at alt gikk bra. Prosessen avsluttes uten videre.

Avslutting av flere prosesser etter navn

Hvis du har flere kopier av en prosess som kjører, eller en prosess har skapt flere underprosesser (slik som Google Chrome kan gjøre), hvordan kan du avslutte dem? Det er like enkelt. Vi bruker `killall`-kommandoen.

Vi har to forekomster av `top` som kjører:

ps -e | grep top

Vi kan avslutte begge med denne kommandoen:

sudo killall top

Ingen respons betyr ingen problemer, så begge prosessene er avsluttet.

Få en dynamisk oversikt med `top`

Utdataene fra `ps` er et øyeblikksbilde. Det oppdateres ikke. For å få en oppdatert oversikt over prosessene, bruk `top`-kommandoen. Den gir en dynamisk visning av prosessene som kjører på maskinen din. Visningen består av to deler. Øverst er et dashbord med tekstlinjer, og nederst en tabell med kolonner.

Start `top` med denne kommandoen:

top

Kolonnene inneholder informasjon om prosessene:

PID: Prosess-ID
BRUKER: Navnet på eieren av prosessen
PR: Prosessprioritet
NI: Nice-verdien for prosessen
VIRT: Virtuelt minne som brukes av prosessen
RES: Resident minne som brukes av prosessen
SHR: Delt minne som brukes av prosessen
S: Status for prosessen. Se listen nedenfor over mulige verdier for dette feltet
%CPU: Andelen CPU-tid brukt av prosessen siden forrige oppdatering
%MEM: Andel av fysisk minne brukt
TID+: Total CPU-tid brukt av oppgaven i hundredeler av et sekund
KOMMANDO: Kommandonavn eller kommandolinje (navn og kommandolinjeparametere) Hvis kommandokolonnen ikke vises, trykk på «høyre pil»-tasten.

Statusen for prosessen kan være en av:

D: Uav