Hvordan bruke ps-kommandoen til å overvåke Linux-prosesser

Få et øyeblikksbilde av prosessene som kjører på din Linux-datamaskin med ps-kommandoen. Finn prosesser etter navn, bruker eller til og med terminal med så mye eller så lite detaljer du trenger. Vi viser deg hvordan.

Prosesshåndtering på Linux

Det bankende hjertet i alle Linux- og Unix-lignende operativsystemer er kjernen. Blant dens mange ansvarsområder er allokering av systemressurser som RAM og CPU-tid. Disse må sjongleres i sanntid slik at alle kjørende prosesser får sin rettferdige del, i henhold til prioriteringen av hver oppgave.

Noen ganger kan oppgaver låse seg, eller gå inn i en tett løkke, eller av andre grunner ikke reagerer. Eller de kan fortsette å kjøre, men sluker for mye CPU-tid eller RAM, eller oppfører seg på en like usosial måte. Noen ganger må oppgaver drepes som en nåde for alle involverte. Det første steget. Selvfølgelig er det å identifisere den aktuelle prosessen.

Men kanskje du ikke har noen oppgave- eller ytelsesproblemer i det hele tatt. Kanskje du bare er nysgjerrig på hvilke prosesser som kjører inne i datamaskinen din, og du vil gjerne kikke under panseret. ps-kommandoen tilfredsstiller begge disse behovene. Det gir deg et øyeblikksbilde av hva som skjer inne på datamaskinen «akkurat nå.»

ps er fleksibel nok til å gi deg nøyaktig informasjonen du trenger i akkurat det formatet du vil ha den. Faktisk har ps veldig mange alternativer. Alternativene beskrevet her vil dekke de fleste vanlige behov. Hvis du trenger å gå dypere inn i ps enn vi har tatt det i denne artikkelen, vil du finne at vår introduksjon gjør man-siden lettere å fordøye.

Oppføringsprosesser

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

ps

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

De fire kolonnene er:

PID: Prosess-ID-nummeret til prosessen.
TTY: Navnet på konsollen som brukeren er logget på.
TID: Mengden CPU-behandlingstid som prosessen har brukt.
CMD: Navnet på kommandoen som startet prosessen

Oppføringsprosess for alle brukere

ved å legge til -e (velg alle prosesser) kan vi få ps til å liste opp prosessene som er startet av alle brukere, ikke bare brukeren som kjører ps-kommandoen. Fordi dette kommer til å bli en lang liste, legger vi den inn i mindre.

ps -e | less

Prosesslisten overføres til mindre.

  Hvordan bruke på og batch på Linux for å planlegge kommandoer

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

Viser prosesshierarki

Noen ganger kan det hjelpe å finne ut et problem eller identifisere en bestemt prosess hvis du kan se hvilke prosesser som startet andre prosesser. Vi bruker alternativet -H (hierarki) for å gjøre det.

ps -eH | less

Innrykk angir hvilke prosesser som er foreldre til hvilke andre prosesser.

For å legge til litt mer klarhet kan vi be ps om å legge til noen ASCII linjer og for å tegne hierarkiet som et tre. Alternativet for å gjøre dette er -skog-alternativet.

ps -eH --forest | less

Dette gjør det lettere å spore hvilke prosesser som er foreldre til andre prosesser.

Oppføringsprosesser etter navn

Du kan sende utdata fra ps gjennom grep til listeoppføringer som har navn som samsvarer med søkeordet. Her ser vi etter oppføringer som samsvarer med «firefox»-søkeordet:

ps -e | grep firefox

I dette tilfellet er utdataene en enkelt oppføring for prosessen vi er interessert i. Selvfølgelig, hvis vi hadde lansert flere forekomster av Firefox, ville det vært returnert mer enn ett element i listen.

Viser flere kolonner i utdata

For å legge til flere kolonner til 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: Starttid. Tidspunktet da prosessen startet.
TTY: Navnet på konsollen som brukeren er logget på.
TID: Mengden CPU-behandlingstid som prosessen har brukt.
CMD: Navnet på kommandoen som startet prosessen.

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

ps -eF | less

Kolonnene vi får denne gangen krever at skjermen rulles sidelengs for å avsløre dem alle.

Ved å trykke på «høyre pil»-tasten flyttes skjermen til 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: Beboersettstørrelse. Dette er det ikke-byttede fysiske minnet som brukes av prosessen.
PSR: Prosessoren som prosessen er tildelt.
TID: Starttid. Tidspunktet da prosessen startet.
TTY: Navnet på konsollen som brukeren er logget på.
TID: Mengden CPU-behandlingstid som prosessen har brukt.
CMD: Navnet på kommandoen som startet prosessen.

Oppføringsprosesser etter prosess-ID

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

ps -p 3403

Detaljene for denne prosessen er oppført:

  Hvordan migrere Ext2 eller Ext3 filsystemer til Ext4 på Linux

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

Listeprosesser etter kommando

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

ps -C shutter

Detaljene for lukkerprosessen er oppført.

Oppføringsprosesser som eies av en bruker

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

ps -u mary

Prosessene som eies av brukerkontoen mary vises.

Listeprosesser etter terminal

For å se prosessene knyttet til en TTY, bruk alternativet -t (velg av TTY). Brukt uten et TTY-nummer, rapporterer -t-alternativet om prosesser knyttet til gjeldende terminalvindu.

tty
ps -t

tty-kommandoen rapporterer at dette er pseudo-teletype 0. Prosessene oppført av ps -t er alle assosiert med TTY pts/0.

Hvis vi sender et TTY-nummer på kommandolinjen, bør vi få en rapport om prosessene knyttet til den TTY-en.

ps -t 1

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

Velge kolonner som skal vises

Med alternativet -o (format) kan du velge hvilke kolonner du vil ha med i utdataene fra ps. Du spesifiserer kolonnene etter navn. Den (lange) listen over kolonnenavn kan sees på mannside i delen med tittelen «Standard Format Specifiers.» I dette eksemplet velger vi å ha CPU-tiden (pcpu) og kommandolinjen med argumenter (args) inkludert i utdataene.

ps -e -o pcpu,args | less

Utdataene inkluderer bare våre to forespurte kolonner.

Sortering av produksjonen etter kolonner

Du kan få utdataene sortert for deg ved å bruke –sort-alternativet. La oss sortere utdataene etter CPU-kolonnen:

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

Bindestreken «-» på sorteringsparameteren pcpu gir en synkende sorteringsrekkefølge.

For å se de ti mest CPU-intensive prosessene, rør utdataene gjennom hodet kommando:

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

Vi får en sortert, avkortet liste.

Hvis vi legger til flere kolonner i displayet vårt, kan vi sortere etter flere kolonner. La oss legge til pmem-kolonnen. Dette er prosentandelen av datamaskinens 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ør den andre kolonnen, og den andre kolonnen er sortert i stigende rekkefølge fordi vi ikke har satt en bindestrek på pmem.

  Hvordan se ledig diskplass og diskbruk fra Linux-terminalen

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

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

Nå kan vi identifisere prosessene.

Drep prosesser etter prosess-ID

Vi har dekket en rekke måter å identifisere prosesser på, inkludert navn, kommando, bruker og terminal. Vi har også dekket måter å identifisere prosesser etter deres dynamiske attributter, som CPU-bruk og minne.

Så på en eller annen måte kan vi identifisere prosessene som kjører. Ved å kjenne deres prosess-ID, kan vi (hvis vi trenger det) drepe noen av disse prosessene ved å bruke kill-kommandoen. Hvis vi ønsket å drepe prosess 898, ville vi brukt dette formatet:

sudo kill 898

Hvis alt går bra, avsluttes prosessen stille.

Drapsprosesser etter navn

Pkill-kommandoen lar deg drepe prosesser ved navn. Sørg for at du har identifisert den riktige prosessen! Denne kommandoen vil avslutte toppprosessen.

sudo pkill top

Igjen, ingen nyheter er gode nyheter. Prosessen avsluttes stille.

Drep flere prosesser etter navn

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

Vi har to eksemplarer av toppløpet:

ps -e | grep top

Vi kan avslutte begge med denne kommandoen:

sudo killall top

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

Få en dynamisk visning med topp

Utgangen fra ps er et øyeblikksbilde. Den oppdateres ikke. For å få en oppdatering av prosessene, bruk toppkommandoen. Det gir en dynamisk visning av prosessene som kjører på datamaskinen din. Displayet er i to deler. Det er et dashbordområde øverst på skjermen som består av tekstlinjer, og en tabell i den nedre delen av skjermen som består av kolonner.

Start toppen med denne kommandoen:

top

Kolonnene inneholder informasjon om prosessene:

PID: Prosess-ID
BRUKER: Navn på eieren av prosessen
PR: Prosessprioritet
NI: Den gode verdien av prosessen
VIRT: Virtuelt minne som brukes av prosessen
RES: Residentminne som brukes av prosessen
SHR: Delt minne som brukes av prosessen
S: Status for prosessen. Se listen nedenfor over verdiene dette feltet kan ha
%CPU: andelen CPU-tid brukt av prosessen siden siste 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 kan sees, trykk på «høyrepil»-tasten.

Status for prosessen kan være en av:

D: Uavbrutt søvn
R: Løper
S: Sover
T: Sporet (stoppet)
Z: Zombie

Trykk på «Q»-tasten for å avslutte fra toppen.

Før du dreper en prosess

Pass på at det er den du er ute etter, og sjekk at det ikke kommer til å forårsake problemer. Spesielt er det verdt å sjekke med alternativene -H (hierarki) og -skog for å sikre at den ikke har noen viktige underordnede prosesser du har glemt.