Använd ps-kommandot för att få en snabb överblick över de processer som körs på din Linux-dator. Du kan filtrera processer efter namn, användare eller terminal, med den detaljnivå du önskar. Låt oss utforska hur.
Processhantering i Linux
Kärnan är grunden för alla Linux- och Unix-liknande operativsystem. En av kärnans centrala funktioner är att fördela systemresurser som RAM och CPU-tid. Detta sker kontinuerligt så att alla aktiva processer får den del de behöver, baserat på uppgiftens prioritet.
Ibland kan processer fastna, hamna i oändliga loopar eller helt enkelt sluta svara. Det kan också hända att processer fortsätter köra men använder för mycket CPU-tid eller minne, eller agerar på annat sätt olämpligt. I sådana fall kan det vara nödvändigt att avsluta processen. Det första steget är att identifiera den problematiska processen.
Det kan också vara så att du inte har några prestandaproblem, utan bara är nyfiken på vilka processer som körs på din dator och vill utforska vad som händer under ytan. ps-kommandot tillgodoser båda dessa behov. Det ger dig en realtidsvy över aktiviteten på din dator.
ps är mycket flexibelt och låter dig få precis den information du behöver, i det format du önskar. Det finns otaliga alternativ, men de som vi går igenom här täcker de flesta vanliga behoven. Om du behöver djupdyka mer i ps, kommer den här introduktionen hjälpa dig att lättare förstå manualsidan.
Lista processer
Det enklaste sättet att använda ps är utan parametrar:
ps
Detta visar en lista över processer som startats av användaren som kör kommandot.
De fyra kolumnerna representerar:
PID: Processens ID-nummer.
TTY: Namnet på den terminal som användaren är inloggad på.
TIME: Mängden CPU-tid processen har använt.
CMD: Namnet på kommandot som startade processen.
Visa processer för alla användare
Genom att lägga till -e (välj alla processer), kan ps visa processer som startats av alla användare, inte bara den som kör ps-kommandot. Eftersom det kan bli en lång lista, använder vi less för att bläddra:
ps -e | less
Processlistan visas med less.
Nu har vi fler poster, men de visas i samma fyra kolumner. De poster som har ett frågetecken (?) i TTY-kolumnen har inte startats från en terminal.
Visa processhierarki
För att felsöka eller identifiera processer, kan det vara hjälpsamt att se vilka processer som startat andra processer. Vi använder -H (hierarki) för detta:
ps -eH | less
Indraget visar vilka processer som är ”föräldrar” till andra.
För att göra det ännu tydligare, kan vi be ps att rita hierarkin som ett träd med ASCII-linjer. Vi använder alternativet –forest för detta:
ps -eH --forest | less
Detta gör det enklare att se vilka processer som härstammar från andra.
Filtrera processer efter namn
Du kan skicka utdata från ps till grep för att lista processer vars namn matchar en sökterm. I det här fallet söker vi efter ”firefox”:
ps -e | grep firefox
Resultatet visar en process. Om vi haft fler instanser av Firefox, skulle de också visas i listan.
Visa fler kolumner
Använd -f (fullformat) för att visa fler kolumner i utdata:
ps -ef | less
Nu visas ytterligare kolumner.
Kolumnerna är nu:
UID: Användar-ID för processens ägare.
PID: Processens ID-nummer.
PPID: ID-numret för processens överordnade process.
C: Antal underprocesser.
STIME: Starttiden.
TTY: Terminalen som processen är kopplad till.
TIME: CPU-tid som processen använt.
CMD: Kommandot som startade processen.
Vi kan få ännu fler kolumner med -F (extra fullformat):
ps -eF | less
Den här gången behöver vi scrolla i sidled för att se alla kolumner.
Med högerpilen kan vi flytta vyn åt vänster.
Nu visas följande kolumner:
UID: Användar-ID för processens ägare.
PID: Processens ID-nummer.
PPID: ID-numret för processens överordnade process.
C: Antal underprocesser.
SZ: Storlek på processen i RAM-sidor.
RSS: Minne processen använder (ej swappat).
PSR: Processorn processen är tilldelad.
STIME: Starttiden.
TTY: Terminalen som processen är kopplad till.
TIME: CPU-tid som processen använt.
CMD: Kommandot som startade processen.
Lista processer med process-ID
När du har ett process-ID (PID), kan du visa detaljer med -p (välj efter process-ID):
ps -p 3403
Detaljer för den angivna processen visas.
Du kan ange flera PID-nummer, separerade med mellanslag.
Lista processer med kommando
Alternativet -C (kommando) gör att du kan söka med kommandots namn. Det är alltså namnet på kommandot som startade processen, och skiljer sig från kommandoraden som kan innehålla sökvägar och parametrar:
ps -C shutter
Detaljer för ”shutter”-processen visas.
Lista processer för specifik användare
För att visa processer som ägs av en viss användare, använd -u (användarlista):
ps -u mary
Här visas processer ägda av användaren ”mary”.
Lista processer med terminal
Använd -t (välj med TTY) för att visa processer kopplade till en TTY. Om -t används utan ett TTY-nummer, visas processer kopplade till aktuell terminal:
tty
ps -t
Kommandot `tty` visar att detta är pseudo-teletyp 0. Processerna som `ps -t` listar är kopplade till TTY pts/0.
Om vi anger ett TTY-nummer visas processerna kopplade till den TTY:
ps -t 1
Denna gång visas processerna kopplade till TTY pts/1.
Anpassa kolumner
Med -o (format) kan du välja vilka kolumner som ska visas. Kolumnerna anges med namn. Se manualsidan för den (långa) listan över kolumnnamn. Här väljer vi CPU-tid (pcpu) och kommandoraden med argument (args):
ps -e -o pcpu,args | less
Utdata visar nu endast de två kolumnerna vi valde.
Sortera utdata
Med –sort kan utdata sorteras. Här sorterar vi efter CPU-kolumnen:
ps -e -o pcpu,args --sort -pcpu| less
Bindestrecket (-) i sort-parametern ger fallande sorteringsordning.
För att se de 10 mest CPU-krävande processerna, skickar vi utdatan till head:
ps -e -o pcpu,args --sort -pcpu | head -10
Vi får en sorterad och trunkerad lista.
Om vi lägger till fler kolumner, kan vi sortera efter flera kriterier. Vi lägger till pmem, procentandelen av minnet en process använder. Utan bindestreck eller med ett plustecken (+), är sorteringsordningen stigande:
ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10
Den nya kolumnen ingår i sorteringen. Den första kolumnen sorteras först, och den andra i stigande ordning eftersom vi inte angav något bindestreck för pmem.
Låt oss lägga till process-ID (pid) för att se processnumret för varje process:
ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10
Nu kan vi lättare identifiera processerna.
Avsluta processer med process-ID
Vi har nu sett flera metoder för att identifiera processer, inklusive namn, kommando, användare och terminal, samt dynamiska attribut som CPU-användning och minnesanvändning. När vi har process-ID:t kan vi avsluta processen med kommandot kill. Om vi vill avsluta process 898, gör vi så här:
sudo kill 898
Om allt går bra avslutas processen utan att ge respons.
Avsluta processer med namn
Kommandot pkill låter dig avsluta processer med namn. Se till att du identifierat rätt process! Detta kommando avslutar ”top”-processen:
sudo pkill top
Återigen, tystnad betyder att processen avslutades utan problem.
Avsluta flera processer med namn
Om du har flera instanser av en process, eller om en process har skapat underprocesser (som Google Chrome kan göra), hur avslutar du dem? Det är lika enkelt. Vi använder kommandot killall.
Vi har två ”top”-processer som körs:
ps -e | grep top
Vi kan avsluta båda med detta kommando:
sudo killall top
Ingen respons betyder att processerna har avslutats.
Dynamisk vy med top
Utdatan från `ps` är en ögonblicksbild och uppdateras inte. För en realtidsvy av processerna, använd kommandot `top`. Det ger en dynamisk vy av processerna som körs på din dator. Visningen består av två delar; ett instrumentpanel överst och en tabell nedan.
Starta med kommandot:
top
Kolumnerna innehåller följande information:
PID: Process-ID
ANVÄNDARE: Processens ägare
PR: Processprioritet
NI: Processens ”nice”-värde
VIRT: Virtuellt minne som processen använder
RES: Minne i RAM som processen använder
SHR: Delat minne som processen använder
S: Processens status. Se listan nedan.
%CPU: Andel CPU-tid som processen använt sedan senaste uppdateringen
%MEM: Andel av fysiskt minne som processen använder
TIME+: Total CPU-tid som uppgiften använt (hundradels sekunder)
KOMMANDO: Kommandonamn eller kommandorad. Om kommandokolumnen inte syns, använd högerpilen.
Processens status kan vara:
D: Oavbruten sömn
R: Kör
S: Sover
T: Spårad (stoppad)
Z: Zombie
Tryck ”Q” för att avsluta top.
Innan du avslutar en process
Se till att det är rätt process, och att det inte kommer att skapa problem. Kolla gärna med alternativen -H (hierarki) och –forest för att se om det finns viktiga underprocesser som du glömt bort.