Processer i Linux, liksom i de flesta moderna operativsystem, är instanser av körande program. Varje gång du startar ett program, skapar operativsystemet en ny process som ger programmet de resurser det behöver för att köra. Processhanteringen i Linux är en central del av operativsystemets funktion och innefattar skapande, schemaläggning och avslutning av processer. Här följer en översikt över hur processer fungerar i Linux:
Skapande av Processer
- Föräldra- och Barnprocesser: När en process startar en annan process, blir den ursprungliga processen en föräldraprocess och den nya processen blir en barnprocess. Detta möjliggör en hierarki av processer.
fork()
ochexec()
Systemanrop: Processer skapas vanligtvis genom ettfork()
systemanrop som duplicerar en befintlig process. Den nya processen (barnet) får en unik process-ID (PID) men kör initialt samma kod som föräldern. Barnprocessen kan sedan användaexec()
systemanropet för att ladda och köra en ny programkod.
Schemaläggning av Processer
- Process Scheduler: Linux använder en schemaläggare för att bestämma vilken process som ska få använda CPU:n. Schemaläggaren fördelar processorns tid mellan de olika processerna för att säkerställa att systemet kör smidigt och effektivt.
- Prioriteter: Varje process tilldelas en prioritet som påverkar hur ofta och hur länge den får tillgång till CPU:n. Användare kan ibland justera dessa prioriteter med kommandon som
nice
ochrenice
.
Processstat
- Stat: En process i Linux kan vara i olika tillstånd, såsom ”Running” (körs), ”Sleeping” (sover), ”Stopped” (stoppad), eller ”Zombie” (zombie). Dessa tillstånd ger information om vad processen gör för tillfället.
Hantering av Processer
- Signalhantering: Linux tillåter kommunikation med och mellan processer genom signaler. Exempelvis kan en
SIGKILL
signal användas för att tvinga en process att avsluta. - Process-ID (PID) och Parent Process ID (PPID): Varje process tilldelas ett unikt PID, och varje process känner till sitt föräldra-PID (PPID), vilket möjliggör spårning och kontroll av processer.
Avslutning av Processer
- När en process avslutas, antingen genom att den slutför sin körning eller avbryts av en signal, returnerar den en avslutningskod till sitt föräldraprocess, och operativsystemet frigör de resurser som använts av processen.
Linux tillhandahåller ett robust verktyg för att arbeta med och hantera processer, inklusive kommandoradsverktyg som ps
, top
, htop
, kill
, och nice
, som låter användare se och påverka processer som körs på systemet.
För att Hantera Processer
ps
: Visar information om aktiva processer. Med olika alternativ kan du anpassa vilken information som visas.top
: Ger en realtidsöversikt över systemet, inklusive en lista över processer som använder mest resurser. Det låter dig även utföra åtgärder på processer.htop
(om installerad): En mer avancerad version avtop
med en användarvänlig interaktiv gränssnitt för processövervakning och hantering.pgrep
: Söker efter processer baserat på deras namn och andra attribut och visar deras process-ID (PID).pkill
: Skickar signaler till processer, identifierade genom deras namn eller andra attribut, för att exempelvis avsluta dem.kill
: Skickar en signal till en specifik process, vanligtvis för att avsluta den. Används med processens PID.killall
: Liknarpkill
men avslutar alla processer som matchar namnet som ges som argument.nice
: Startar en ny process med en angiven prioritet (”niceness”).renice
: Ändrar prioritet på en redan körande process.nohup
: Kör ett kommando oberoende av terminalen som kan fortsätta köras i bakgrunden även efter att användaren loggat ut.
För att Styra Jobb
jobs
: Listar jobb som har startats i den aktuella terminalen.bg
: Återupptar ett stoppat jobb i bakgrunden.fg
: Flyttar ett jobb från bakgrunden till förgrunden.disown
: Tar bort ett jobb från skallets jobblista, vilket gör att det inte längre är associerat med terminalen.
För att Övervaka och Debugga Processer
strace
: Spårar systemanrop och signaler från en specifik process. Det är användbart för att felsöka och förstå hur ett program interagerar med kärnan.lsof
: Listar öppna filer och de processer som har dem öppna. Det kan användas för att hitta ut vilka filer en process använder.vmstat
,iostat
, ochmpstat
: Används för att övervaka systemets prestanda, inklusive CPU-användning, I/O-operationer, och minnesanvändning.
Exempel på hur man använder ps.
ps
Detta kommando visar processerna som är associerade med den aktuella terminalsessionen.
Visa Specifik Information
ps -e
ps -A
Dessa kommandon listar alla processer på systemet.
Visa alla processer med fullständig information:
ps -ef
ps -aux
Dessa kommandon visar en detaljerad lista över alla processer, inklusive användar-ID, PID, CPU- och minnesanvändning, starttid, kommando som startade processen, och mer. Notera att aux
inte är en sammanfogning av flaggor utan snarare en specifik option för ps
.
Visa Trädstruktur för Processer
ps -ejH
ps axjf
Dessa kommandon visar processerna i en trädstruktur, vilket hjälper dig att förstå föräldra-barn-relationer mellan processerna.
Sortera Processer efter CPU- eller Minnesanvändning
Sortera processer efter minnesanvändning:
ps aux –sort=-%mem
Sortera processer efter CPU-användning:
ps aux –sort=-%cpu
Dessa kommandon sorterar processerna baserat på hur mycket minne eller CPU de använder, med de mest resurskrävande processerna först.
Genom att kombinera ps
med andra kommandon och verktyg (som grep
, awk
, eller sort
), kan du utföra kraftfulla analyser och hantering av processer på ditt system.
Så använder man kill
Kommandot kill
används i Linux för att skicka signaler till processer. Vanligtvis används kill
för att avsluta processer. Varje signal har ett specifikt syfte, men de mest använda är SIGTERM
(signal 15) för att be en process att avsluta och SIGKILL
(signal 9) för att tvinga en process att omedelbart avsluta. Här är några exempel på hur man använder kill
:
Grundläggande Användning
- Avsluta en process med dess PID:
kill 1234
Detta kommando skickar signalen SIGTERM
till processen med PID (Process ID) 1234, vilket ber den att avsluta sig själv på ett säkert sätt.
Använda Specifika Signaler
- Tvinga avslutning av en process:
kill -9 1234
eller
kill -SIGKILL 1234
Dessa kommandon skickar signalen SIGKILL
till processen, vilket omedelbart avslutar processen utan att vänta på att den ska städa efter sig. Använd detta alternativ försiktigt eftersom det kan resultera i förlust av data.
- Be en process att avsluta:
kill -15 1234
eller
kill -SIGTERM 1234
Det är standardbeteendet för kill
och brukar vara föredraget eftersom det ger processen en chans att korrekt stänga ner och frigöra resurser.
Skicka Signaler till Flera Processer
- Avsluta flera processer samtidigt:
kill 1234 5678 91011
Detta kommando skickar SIGTERM
till alla angivna PIDs.
Använda kill
med pgrep
- Avsluta alla processer med ett specifikt namn:
kill $(pgrep processnamn)
Detta kommando använder pgrep
för att hitta alla processer som matchar namnet ”processnamn” och skickar sedan SIGTERM
till var och en av dem.
Använda pkill
För att göra saker enklare kan du använda pkill
, som låter dig skicka signaler till processer baserat på deras namn eller andra attribut, utan att behöva veta deras PID:
- Avsluta processer baserat på namn:
pkill processnamn
Detta kommando skickar standard signalen SIGTERM
till alla processer vars namn matchar ”processnamn”.
Använda killall
killall
är ett annat kommando som liknar pkill
men med lite olika syntax och alternativ:
- Avsluta alla instanser av en process baserat på dess namn:
killall processnamn
Detta skickar också SIGTERM
till alla processer som matchar namnet ”processnamn”.
Användningen av kill
, pkill
, och killall
ger dig flexibilitet i hur du hanterar processer på ditt system, från att försiktigt be en process att stänga ner till att tvinga en omedelbar avslutning.