• Så fungera processer i Linux

    Ett vanlig linux system håller många processer igång

    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() och exec() Systemanrop: Processer skapas vanligtvis genom ett fork() 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ända exec() 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 och renice.

    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 av top 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: Liknar pkill 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, och mpstat: 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

    Med kill kommandot kan man döda processer som har slutat fungerat .

    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.


Så fungera processer i Linux

Ett vanlig linux system håller många processer igång

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() och exec() Systemanrop: Processer skapas vanligtvis genom ett fork() 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ända exec() 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 och renice.

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 av top 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: Liknar pkill 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, och mpstat: 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

Med kill kommandot kan man döda processer som har slutat fungerat .

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.