Sådan bruger du ps-kommandoen til at overvåge Linux-processer

Få et øjebliksbillede af de processer, der kører på din Linux-computer med ps-kommandoen. Find processer efter navn, bruger eller endda terminal med så mange eller så få detaljer, som du har brug for. Vi viser dig hvordan.

Processtyring på Linux

Det bankende hjerte i alle Linux- og Unix-lignende operativsystemer er kernen. Blandt dets mange ansvarsområder er allokeringen af ​​systemressourcer såsom RAM og CPU-tid. Disse skal jongleres i realtid, så alle kørende processer får deres rimelige andel i henhold til hver opgaves prioritet.

Nogle gange kan opgaver låse sig, eller komme ind i en stram løkke, eller blive uresponsive af andre årsager. Eller de kan fortsætte med at køre, men sluge for meget CPU-tid eller RAM eller opføre sig på en lige så asocial måde. Nogle gange skal opgaver slås ihjel som en nåde for alle involverede. Det første skridt. Det er selvfølgelig at identificere den pågældende proces.

Men måske har du slet ingen opgave- eller ydeevneproblemer. Måske er du bare nysgerrig efter, hvilke processer der kører inde i din computer, og du vil gerne kigge ind under motorhjelmen. ps kommandoen opfylder begge disse behov. Det giver dig et øjebliksbillede af, hvad der sker inde i din computer “lige nu.”

ps er fleksibel nok til at give dig præcis den information, du har brug for, i præcis det format, du ønsker det. Faktisk har ps rigtig mange muligheder. De muligheder, der er beskrevet her, vil imødekomme de fleste almindelige behov. Hvis du har brug for at gå dybere ned i ps, end vi har taget det i denne artikel, vil du opdage, at vores introduktion gør man-siden lettere at fordøje.

Listeprocesser

Den nemmeste måde at bruge ps på er at tænde den op uden parametre:

ps

ps viser en liste over de processer, der er startet af den bruger, der kørte kommandoen.

De fire kolonner er:

PID: Processens ID-nummer.
TTY: Navnet på den konsol, som brugeren er logget ind på.
TID: Mængden af ​​CPU-behandlingstid, som processen har brugt.
CMD: Navnet på den kommando, der startede processen

Listeproces for alle brugere

ved at tilføje -e (vælg alle processer) kan vi få ps til at liste de processer, der er startet af alle brugere, ikke kun den bruger, der kører ps-kommandoen. Fordi dette bliver en lang liste, satser vi på mindre.

ps -e | less

Processlisten er ført ind i mindre.

  Hvorfor Desktop Linux stadig betyder noget

Vi har mange flere poster på listen, men vi ser de samme fire kolonner som før. Indgangene med et spørgsmålstegn ? i TTY-kolonnen blev ikke startet fra et terminalvindue.

Viser proceshierarki

Nogle gange kan det hjælpe at finde ud af et problem eller identificere en bestemt proces, hvis du kan se, hvilke processer der lancerede andre processer. Vi bruger muligheden -H (hierarki) til at gøre det.

ps -eH | less

Indrykningen angiver, hvilke processer der er forældre til hvilke andre processer.

For at tilføje lidt mere klarhed kan vi bede ps om at tilføje nogle ASCII linjer og for at tegne hierarkiet som et træ. Muligheden for at gøre dette er -skov-indstillingen.

ps -eH --forest | less

Dette gør det nemmere at spore, hvilke processer der er forældre til andre processer.

Listeprocesser efter navn

Du kan sende output fra ps gennem grep til listeposter der har navne, der matcher søgeordet. Her leder vi efter poster, der matcher “firefox”-søgeudtrykket:

ps -e | grep firefox

I dette tilfælde er outputtet en enkelt indgang for den proces, vi er interesseret i. Selvfølgelig, hvis vi havde lanceret flere forekomster af Firefox, ville der være returneret mere end ét element på listen.

Viser flere kolonner i outputtet

For at tilføje flere kolonner til outputtet skal du bruge -f (fuldformat) mulighed.

ps -ef | less

Et ekstra sæt kolonner er inkluderet i outputtet fra ps.

Kolonnerne er:

UID: Bruger-id’et for ejeren af ​​denne proces.
PID: Processens proces-id.
PPID: Overordnet proces-id for processen.
C: Antallet af børn, processen har.
TID: Starttidspunkt. Det tidspunkt, hvor processen startede.
TTY: Navnet på den konsol, som brugeren er logget ind på.
TID: Mængden af ​​CPU-behandlingstid, som processen har brugt.
CMD: Navnet på den kommando, der startede processen.

Ved at bruge muligheden -F (ekstra fuldformat) kan vi få endnu flere kolonner:

ps -eF | less

De kolonner, vi får denne gang, kræver, at skærmen rulles sidelæns for at afsløre dem alle.

Ved at trykke på “højre pil”-tasten flyttes displayet til venstre.

De kolonner vi nu får er:

UID: Bruger-id’et for ejeren af ​​denne proces.
PID: Processens proces-id.
PPID: Overordnet proces-id for processen.
C: Antallet af børn, processen har.
SZ: Størrelse i RAM-sider af procesbilledet.
RSS: Resident sæt størrelse. Dette er den ikke-ombyttede fysiske hukommelse, der bruges af processen.
PSR: Den processor, som processen er tildelt.
TID: Starttidspunkt. Det tidspunkt, hvor processen startede.
TTY: Navnet på den konsol, som brugeren er logget ind på.
TID: Mængden af ​​CPU-behandlingstid, som processen har brugt.
CMD: Navnet på den kommando, der startede processen.

Listeprocesser efter proces-id

Når du har fundet proces-id’et for den proces, du er interesseret i, kan du bruge den sammen med kommandoen ps for at vise detaljerne for den proces. Brug muligheden -p (vælg efter proces-id) for at opnå dette:

ps -p 3403

Detaljerne for denne proces er angivet:

  De 5 bedste NVMe SSD'er til brug med Linux (2021 Edition)

Du er ikke begrænset til ét proces-id. Du kan angive en liste over proces-id’er, adskilt af mellemrum.

Listeprocesser efter kommando

Indstillingen -C (kommando) lader dig søge efter en proces ved hjælp af kommandonavnet. Det vil sige navnet på den kommando, der startede processen. Dette er subtilt forskelligt fra kommandolinjen, som kan omfatte stinavne og parametre eller muligheder.

ps -C shutter

Detaljerne for lukkerprocessen er angivet.

Listeprocesser, der ejes af en bruger

For at se de processer, der ejes af en bestemt bruger, skal du bruge muligheden -u (brugerliste):

ps -u mary

De processer, der ejes af brugerkontoen mary, vises.

Listeprocesser efter terminal

For at se de processer, der er forbundet med en TTY, skal du bruge muligheden -t (vælg ved TTY). Brugt uden et TTY-nummer rapporterer -t-indstillingen om processer forbundet med det aktuelle terminalvindue.

tty
ps -t

tty-kommandoen rapporterer, at dette er pseudo-teletype 0. Processerne angivet af ps -t er alle forbundet med TTY pts/0.

Hvis vi sender et TTY-nummer på kommandolinjen, bør vi få en rapport over de processer, der er forbundet med den pågældende TTY.

ps -t 1

Denne gang er processerne alle forbundet med TTY pts/1.

Valg af kolonner, der skal vises

Med -o (format) muligheden kan du vælge hvilke kolonner du vil have inkluderet i outputtet fra ps. Du angiver kolonnerne ved navn. Den (lange) liste over kolonnenavne kan ses på man-side i afsnittet med titlen “Standard Format Specifiers”. I dette eksempel vælger vi at have CPU-tiden (pcpu) og kommandolinjen med argumenter (args) inkluderet i outputtet.

ps -e -o pcpu,args | less

Outputtet inkluderer kun vores to anmodede kolonner.

Sortering af output efter kolonner

Du kan få outputtet sorteret for dig ved at bruge -sort-indstillingen. Lad os sortere output efter CPU-kolonnen:

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

Bindestregen “-” på pcpu-sorteringsparameteren giver en faldende sorteringsrækkefølge.

For at se de ti mest CPU-intensive processer, rør outputtet gennem hovedet kommando:

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

Vi får en sorteret, afkortet liste.

Hvis vi tilføjer flere kolonner til vores display, kan vi sortere efter flere kolonner. Lad os tilføje pmem-kolonnen. Dette er den procentdel af computerens hukommelse, der bruges af processen. Uden bindestreg, eller med et plus ” +”, er sorteringsrækkefølgen stigende.

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

Vi får vores ekstra kolonne, og den nye kolonne indgår i sorteringen. Den første kolonne er sorteret før den anden kolonne, og den anden kolonne er sorteret i stigende rækkefølge, fordi vi ikke har sat en bindestreg på pmem.

  Sådan bruger du chmod-kommandoen på Linux

Lad os gøre det lidt mere nyttigt og tilføje proces-id-kolonnen (pid), så vi kan se procesnummeret for hver proces i vores liste.

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

Nu kan vi identificere processerne.

Dræbende processer efter proces-id

Vi har dækket en række måder at identificere processer på, herunder navn, kommando, bruger og terminal. Vi har også dækket måder at identificere processer ved deres dynamiske attributter, såsom CPU-brug og hukommelse.

Så på en eller anden måde kan vi identificere de processer, der kører. Ved at kende deres proces-id kan vi (hvis vi har brug for det) dræbe enhver af disse processer ved at bruge kill-kommandoen. Hvis vi ville dræbe proces 898, ville vi bruge dette format:

sudo kill 898

Hvis alt går vel, afsluttes processen stille og roligt.

Drabsprocesser ved navn

Kommandoen pkill giver dig mulighed for dræbe processer ved navn. Sørg for, at du har identificeret den korrekte proces! Denne kommando vil afslutte den øverste proces.

sudo pkill top

Igen, ingen nyheder er gode nyheder. Processen afsluttes stille og roligt.

Dræber flere processer ved navn

Hvis du har flere kopier af en proces kørende, eller en proces har affødt en række underordnede processer (som Google Chrome kan gøre), hvordan kan du dræbe dem? Det er lige så nemt. Vi bruger killall kommandoen.

Vi har to eksemplarer af top kørende:

ps -e | grep top

Vi kan afslutte begge med denne kommando:

sudo killall top

Intet svar betyder ingen problemer, så begge disse processer er blevet afsluttet.

Få en dynamisk visning med top

Outputtet fra ps er et øjebliksbillede. Den opdaterer ikke. Brug den øverste kommando for at få en opdateret visning af processerne. Det giver en dynamisk visning af de processer, der kører på din computer. Displayet er i to dele. Der er et dashboard-område øverst på skærmen, der består af tekstlinjer, og en tabel i den nederste del af skærmen, der består af kolonner.

Start øverst med denne kommando:

top

Kolonnerne indeholder information om processerne:

PID: Proces ID
BRUGER: Navn på ejeren af ​​processen
PR: Procesprioritet
NI: Den gode værdi af processen
VIRT: Virtuel hukommelse, der bruges af processen
RES: Resident hukommelse brugt af processen
SHR: Delt hukommelse, der bruges af processen
S: Status for processen. Se listen nedenfor over de værdier, som dette felt kan have
%CPU: andelen af ​​CPU-tid brugt af processen siden sidste opdatering
%MEM: andel af brugt fysisk hukommelse
TID+: samlet CPU-tid brugt af opgaven i hundrededele af et sekund
KOMMANDO: kommandonavn eller kommandolinje (navn og kommandolinjeparametre) Hvis kommandokolonnen ikke kan ses, skal du trykke på “højre pil”-tasten.

Status for processen kan være en af:

D: Uafbrydelig søvn
R: Løber
S: Sovende
T: Sporet (stoppet)
Z: Zombie

Tryk på “Q”-tasten for at afslutte fra toppen.

Før du dræber en proces

Sørg for, at det er den, du leder efter, og tjek, at det ikke vil give dig problemer. Det er især værd at tjekke med -H (hierarki) og -skov-mulighederne for at sikre, at det ikke har nogen vigtige underordnede processer, som du havde glemt.