Hur man använder ps-kommandot för att övervaka Linux-processer

Få en ögonblicksbild av processerna som körs i din Linux-dator med kommandot ps. Hitta processer efter namn, användare eller till och med terminal med så mycket eller så lite detaljer som du behöver. Vi visar dig hur.

Processhantering på Linux

Det bankande hjärtat i alla Linux- och Unix-liknande operativsystem är kärnan. Bland dess många ansvarsområden är allokeringen av systemresurser som RAM och CPU-tid. Dessa måste jongleras i realtid så att alla pågående processer får sin beskärda del, enligt prioritet för varje uppgift.

Ibland kan uppgifter låsa sig eller hamna i en snäv slinga, eller av andra skäl sluta svara. Eller de kanske fortsätter att köra, men slukar för mycket CPU-tid eller RAM-minne, eller beter sig på något lika asocialt sätt. Ibland måste uppgifter dödas som en nåd för alla inblandade. Det första steget. Naturligtvis är att identifiera processen i fråga.

Men du kanske inte har några uppgifts- eller prestationsproblem alls. Kanske är du bara nyfiken på vilka processer som körs inuti din dator, och du skulle vilja kika under huven. Kommandot ps tillfredsställer båda dessa behov. Det ger dig en ögonblicksbild av vad som händer inuti din dator ”just nu.”

ps är tillräckligt flexibel för att ge dig exakt den information du behöver i exakt det format du vill ha den. Faktum är att ps har väldigt många alternativ. Alternativen som beskrivs här kommer att tillgodose de flesta vanliga behov. Om du behöver gå djupare in i ps än vad vi har tagit det i den här artikeln, kommer du att upptäcka att vår introduktion gör mansidan lättare att smälta.

Listningsprocesser

Det enklaste sättet att använda ps är att aktivera den utan parametrar:

ps

ps visar en lista över de processer som startas av användaren som körde kommandot.

De fyra kolumnerna är:

PID: Processens ID-nummer.
TTY: Namnet på konsolen som användaren är inloggad på.
TID: Mängden CPU-behandlingstid som processen har använt.
CMD: Namnet på kommandot som startade processen

Listningsprocess för alla användare

genom att lägga till -e (välj alla processer) kan vi få ps att lista de processer som har startats av alla användare, inte bara användaren som kör kommandot ps. Eftersom det här kommer att bli en lång lista lägger vi in ​​den i mindre.

ps -e | less

Processlistan förs in i mindre.

Vi har många fler poster i listan, men vi ser samma fyra kolumner som tidigare. Posterna med ett frågetecken ? i TTY-kolumnen startades inte från ett terminalfönster.

Visar processhierarki

Ibland kan det hjälpa att ta reda på ett problem eller identifiera en viss process om du kan se vilka processer som startade andra processer. Vi använder alternativet -H (hierarki) för att göra det.

ps -eH | less

Indraget anger vilka processer som är föräldrar till vilka andra processer.

För att lägga till lite mer klarhet kan vi be ps lägga till några ASCII linjer och för att rita hierarkin som ett träd. Alternativet att göra detta är alternativet –skog.

ps -eH --forest | less

Detta gör det lättare att spåra vilka processer som är föräldrar till andra processer.

Lista processer efter namn

Du kan skicka utdata från ps till grep till listposter som har namn som matchar söktermen. Här letar vi efter poster som matchar ”firefox”-söktermen:

ps -e | grep firefox

I det här fallet är utdata en enda post för processen vi är intresserade av. Om vi ​​hade lanserat flera instanser av Firefox skulle det naturligtvis återkomma mer än ett objekt i listan.

Visar fler kolumner i utdata

För att lägga till fler kolumner till utdata, använd alternativet -f (fullformat).

ps -ef | less

En extra uppsättning kolumner ingår i utdata från ps.

Kolumnerna är:

UID: Användar-ID för ägaren av denna process.
PID: Processens process-ID.
PPID: Processens överordnade process-ID.
C: Antalet barn som processen har.
TID: Starttid. Tidpunkten då processen började.
TTY: Namnet på konsolen som användaren är inloggad på.
TID: Mängden CPU-behandlingstid som processen har använt.
CMD: Namnet på kommandot som startade processen.

Genom att använda alternativet -F (extra fullformat) kan vi få ännu fler kolumner:

ps -eF | less

Kolumnerna vi får den här gången kräver att skärmen rullas i sidled för att avslöja dem alla.

Genom att trycka på högerpilen flyttas displayen åt vänster.

Kolumnerna vi nu får är:

UID: Användar-ID för ägaren av denna process.
PID: Processens process-ID.
PPID: Processens överordnade process-ID.
C: Antalet barn som processen har.
SZ: Storlek i RAM-sidor för processbilden.
RSS: Resident set storlek. Detta är det icke-bytta fysiska minnet som används av processen.
PSR: Processorn som processen är tilldelad.
TID: Starttid. Tiden då processen började.
TTY: Namnet på konsolen som användaren är inloggad på.
TID: Mängden CPU-behandlingstid som processen har använt.
CMD: Namnet på kommandot som startade processen.

Lista processer efter process-ID

När du har hittat process-ID:t för processen du är intresserad av kan du använda det med kommandot ps för att lista detaljerna för den processen. Använd alternativet -p (välj efter process-ID) för att uppnå detta:

ps -p 3403

Detaljerna för denna process är listade:

Du är inte begränsad till ett process-ID. Du kan tillhandahålla en lista över process-ID:n, separerade med mellanslag.

Lista processer efter kommando

Alternativet -C (kommando) låter dig söka efter en process med kommandonamnet. Det vill säga namnet på kommandot som startade processen. Detta skiljer sig subtilt från kommandoraden, som kan innehålla sökvägsnamn och parametrar eller alternativ.

ps -C shutter

Detaljerna för slutarprocessen listas.

Listningsprocesser som ägs av en användare

För att se processerna som ägs av en viss användare, använd alternativet -u (användarlista):

ps -u mary

Processerna som ägs av användarkontot mary visas.

Listningsprocesser efter terminal

För att se processerna associerade med en TTY, använd alternativet -t (välj med TTY). Används utan ett TTY-nummer, alternativet -t rapporterar om processer associerade med det aktuella terminalfönstret.

tty
ps -t

Kommandot tty rapporterar att detta är pseudo-teletyp 0. Processerna listade av ps -t är alla associerade med TTY pts/0.

Om vi ​​skickar ett TTY-nummer på kommandoraden bör vi få en rapport över processerna som är associerade med den TTY.

ps -t 1

Den här gången är alla processer associerade med TTY pts/1.

Välja kolumner som ska visas

Med alternativet -o (format) kan du välja vilka kolumner du vill ha med i utdata från ps. Du anger kolumnerna med namn. Den (långa) listan med kolumnnamn kan ses på man page i avsnittet ”Standardformatspecifikationer”. I det här exemplet väljer vi att ha CPU-tiden (pcpu) och kommandoraden med argument (args) inkluderade i utdata.

ps -e -o pcpu,args | less

Utdata inkluderar bara våra två begärda kolumner.

Sortera utdata efter kolumner

Du kan få utdata sorterad åt dig genom att använda alternativet –sort. Låt oss sortera utdata efter CPU-kolumnen:

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

Bindestrecket ”-” på sorteringsparametern pcpu ger en fallande sorteringsordning.

För att se de tio mest CPU-intensiva processerna, rör utmatningen genom huvudet kommando:

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

Vi får en sorterad, trunkerad lista.

Om vi ​​lägger till fler kolumner i vår display kan vi sortera efter fler kolumner. Låt oss lägga till kolumnen pmem. Detta är procentandelen av datorns minne som används av processen. Utan bindestreck, eller med ett plus ” +”, är sorteringsordningen stigande.

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

Vi får vår extra kolumn, och den nya kolumnen ingår i sorteringen. Den första kolumnen är sorterad före den andra kolumnen, och den andra kolumnen sorteras i stigande ordning eftersom vi inte satt ett bindestreck på pmem.

Låt oss göra det lite mer användbart och lägga till i kolumnen process-ID (pid) så att vi kan se processnumret för varje process i vår lista.

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

Nu kan vi identifiera processerna.

Dödande processer med process-ID

Vi har täckt en rad olika sätt att identifiera processer, inklusive namn, kommando, användare och terminal. Vi har också behandlat sätt att identifiera processer genom deras dynamiska attribut, såsom CPU-användning och minne.

Så på ett eller annat sätt kan vi identifiera de processer som körs. Genom att känna till deras process-ID kan vi (om vi behöver) döda någon av dessa processer med kommandot kill. Om vi ​​ville döda process 898, skulle vi använda detta format:

sudo kill 898

Om allt går bra avslutas processen tyst.

Dödsprocesser efter namn

Kommandot pkill låter dig döda processer med namn. Se till att du har identifierat rätt process! Detta kommando kommer att avsluta toppprocessen.

sudo pkill top

Återigen, inga nyheter är goda nyheter. Processen avslutas tyst.

Döda flera processer med namn

Om du har flera kopior av en process igång, eller om en process har skapat ett antal underordnade processer (som Google Chrome kan göra), hur kan du döda dem? Det är lika enkelt. Vi använder kommandot killall.

Vi har två exemplar av top running:

ps -e | grep top

Vi kan avsluta båda med detta kommando:

sudo killall top

Inget svar betyder inga problem, så båda dessa processer har avslutats.

Få en dynamisk vy med topp

Utdata från ps är en ögonblicksbild. Den uppdateras inte. För att få en uppdaterad vy av processerna, använd toppkommandot. Det ger en dynamisk vy av processerna som körs i din dator. Displayen är i två delar. Det finns ett instrumentpanelsområde längst upp på skärmen som består av textrader och en tabell i den nedre delen av skärmen som består av kolumner.

Börja upptill med detta kommando:

top

Kolumnerna innehåller information om processerna:

PID: Process ID
ANVÄNDARE: Namn på ägaren av processen
PR: Processprioritet
NI: Det fina värdet av processen
VIRT: Virtuellt minne som används av processen
RES: Residentminne som används av processen
SHR: Delat minne som används av processen
S: Status för processen. Se listan nedan över de värden som detta fält kan ta
%CPU: andelen CPU-tid som använts av processen sedan den senaste uppdateringen
%MEM: andel av fysiskt minne som används
TID+: total CPU-tid som används av uppgiften i hundradelar av en sekund
KOMMAND: kommandonamn eller kommandorad (namn och kommandoradsparametrar) Om kommandokolumnen inte kan ses, tryck på högerpilen.

Statusen för processen kan vara en av:

D: Oavbruten sömn
R: Springer
S: Sover
T: Spårad (stoppad)
Z: Zombie

Tryck på ”Q”-tangenten för att avsluta från toppen.

Innan du dödar en process

Se till att det är den du är ute efter och kontrollera att det inte kommer att orsaka dig några problem. I synnerhet är det värt att kolla med alternativen -H (hierarki) och -skog för att se till att det inte har några viktiga underordnade processer som du har glömt bort.