next up previous contents
Vidare: Grundläggande systemadministration. Uppåt: Att använda Slackware Linux. Tillbaka: Att hantera filer och

Att styra processer.

Alla program, som är igång, kallas för processer. Dessa processer kan t.ex. vara fönstersystemet X eller olika systemprogram (demoner), som startas, när man startar datorn. Var process köres av någon särskild användare. Sådana processer, som sättes igång vid systemstart, körs vanligen av root eller nobody. Sådana processer, man själv startar i egenskap av vanlig användare, körs av den användare, man är inloggad som.

Man får styra alla processer, man själv har startat. Därtill får root styra samtliga processer i systemet inbegripet dem, som andra användare har satt igång. Processer kan styras och övervakas såväl genom flera olika program som genom några kommandon i skalet.

Lägga process i bakgrunden.

Sådana program, som igångsättes ifrån kommandoraden, startar i förgrunden. Detta gör, att man kan se programmets utdata och samverka med programkörningen. Emellertid förekommer tillfällen, då man hellre vill ha programmet till att köra utan att lägga beslag på terminalen. Detta benämnes att köra programmet i bakgrunden, och det kan man åstadkomma på flera olika sätt.

Första sättet att lägga en process i bakgrunden är att lägga till et-tecknet »&« efter programmets namn, när man startar det på kommandoraden. Antag t.ex., att vi skulle vilja använda amp, som är en mp3-spelare för kommandoraden, och låta den spela en hel katalog full med mp3-filer, men att vi behöver göra något annat på samma terminal. Följande kommando sätter då igång amp i bakgrunden och laddar samtliga mp3-filer i katalogen:

   $ amp *.mp3 &
Programmet kör som vanligt, men man får tillbaka prompten »$«.

Man kan även lägga en process i bakgrunden, när den redan är igång och kör. Först startar vi ett program. När det är igång och kör, trycker vi på Ctrl+z. Detta lägger processen i pausläge (suspenderar processen), så att den tillfälligt upphör med att köra.gif Det kan dock när som helst startas igen. Har man pausat ett program, så får man prompten tillbaka. Då kan man lägga programmet i bakgrunden genom att kommendera

   $ bg
Nu kommer den tidigare pausade processen att starta igen, men denna gång i bakgrunden.

Lägga process i förgrunden.

Om man behöver samverka med en process, som lagts i bakgrunden, så kan man få fram den i förgrunden igen. Har man bara en enda process i bakgrunden, kan man få fram den med följande kommando:

   $ fg
Om programmet inte har slutat köra, kommer det att att överta terminalen, och man får då inte tillbaka prompten. Ibland händer det, att något program avslutar körningen, medan det ligger i bakgrunden. I så fall visas ett meddelande i stil med följande:

[1]+  Done              /bin/ls $LS_OPTIONS
Detta talar om, att bakgrundsprocessen (i detta fall ls) har kört färdigt.

Det är möjligt att ha flera bakgrundsprocesser igång samtidigt. När detta inträffar, behöver man veta vilka processer, man skall hämta fram till förgrunden. Att enbart slå fg skulle hämta fram den process, som sist lades i bakgrunden. Men tänk, om man nu skulle ha en hel lista med processer i bakgrunden? Lyckligtvis innehåller bash ett kommando för att förteckna alla processer. Det heter jobs och ger en utmatning som denna:

   $ jobs
   [1]   Stopped                 vim
   [2]-  Stopped                 amp
   [3]+  Stopped                 man ps
Detta visar en lista över alla processer, som skjutits i bakgrunden. Som synes är samtliga stannade. Detta innebär, att processerna är suspenderade (pausade). Siffran före är en sorts ID för bakgrundsprocesser. Ett sådant ID med plustecken framför (man ps) betecknar den process, som skall läggas i förgrunden, om man kommenderar enbart fg.

Om man vill hämta fram vim till förgrunden, så kan man skriva:

   $ fg 1
så far vim upp på skärmen. Det kan vara mycket användbart att lägga processer i bakgrunden, när man har endast en terminal öppen över en uppringd förbindelse. Man kan på så vis ha flera program igång samtidigt på denna enda terminal, medan man då och då växlar fram och tillbaka mellan dem.

ps.

 

Nu vet vi alltså, hur vi skall kunna växla fram och tillbaka mellan flera processer, som vi har startat på kommandoraden. Vi vet också, att mängder av processer är igång samtidigt. Hur skall man då kunna få se en förteckning över alla dessa program? Det gör man med kommandot ps(1). Detta kommando har många växlar, så att vi bara skall behandla de viktigaste här. En fullständig förteckning finns på manualsidan för ps. Manualsidor behandlas ingående i avsnittet om man på s. gif i kapitel 2.

Genom att enbart kommendera ps får man en lista över program, som kör på terminalen. Ofta är detta en mycket kort lista:

   $ ps
      PID TTY          TIME CMD
     7923 ttyp0    00:00:00 bash
     8059 ttyp0    00:00:00 ps
Även om detta inte är så många processer, så är informationen typisk. Man får samma kolumner, då man använder ps, oavsett hur många processer, som är igång. Vad betyder då detta?

PID står för process-ID. Alla processer, som är igång, får ett unikt identifieringsnummer. Med linuxkärnor i 2.2.x-serien kan detta PID vara vad som helst emellan 1 och 32767. Var process tilldelas nästa lediga PID. När en process avslutas (eller dödas, såsom vi skall få se i nästa avsnitt), kommer nästa lediga nummer att gå tillbaka till det lägsta lediga numret. Detta skall sannolikt ändras i den kommande 2.4-serien av linuxkärnan och införandet av 32-bit-PID.

Kolumnen TTY visar vilken terminal, processen kör på. Ett enkelt ps visar endast en lista över program, som kör på aktuell terminal, så att alla processer ger samma information i TTY-kolumnen. Som synes köres bägge de här förtecknade processerna på ttyp0. Detta visar, att de endera kör på en fjärrdator eller på en X-terminal av något slag.

Kolumnen TIME visar, hur mycket CPU-tid (processortid), processen har tillryggalagt. Denna avviker ifrån den verkliga tid, processen har varit igång. Man påminner sig, att Linux är ett operativsystem, som kan köra flera program samtidigt. Hela tiden är många processer igång och dessa processer får vardera en liten del av processortiden. Därför bör kolumnen TIME visa mycket mindre tid för var process, än den verkligen har hållit på att köra. Om man ser mer än några minuter i kolumnen TIME, betyder det, att någonting är i olag.

Slutligen visar kolumnen CMD vad programmet egentligen är för något. Denna kolumn förtecknar endast programmets namn, inga växlar eller dylika upplysningar. För att få sådana upplysningar måste vi använda en av de många flaggor, som hör till ps. Vi skall snart diskutera detta.

Man kan få en fullständig förteckning över processer, som är igång i systemet, om man använder en lämplig uppsättning växlar. Det kommer förmodligen att utmynna i en lång lista över processer (femtiofem i vår egen bärbara, medan vi skriver denna mening), så att vi förkortar återgivandet av utmatningen:

   $ ps -ax
   PID TTY      STAT   TIME COMMAND
     1 ?        S      0:03 init [3]
     2 ?        SW     0:13 [kflushd]
     3 ?        SW     0:14 [kupdate]
     4 ?        SW     0:00 [kpiod]
     5 ?        SW     0:17 [kswapd]
    11 ?        S      0:00 /sbin/kerneld
    30 ?        SW     0:01 [cardmgr]
    50 ?        S      0:00 /sbin/rpc.portmap
    54 ?        S      0:00 /usr/sbin/syslogd
    57 ?        S      0:00 /usr/sbin/klogd -c 3
    59 ?        S      0:00 /usr/sbin/inetd
    61 ?        S      0:04 /usr/local/sbin/sshd
    63 ?        S      0:00 /usr/sbin/rpc.mountd
    65 ?        S      0:00 /usr/sbin/rpc.nfsd
    67 ?        S      0:00 /usr/sbin/crond -l10
    69 ?        S      0:00 /usr/sbin/atd -b 15 -l 1
    77 ?        S      0:00 /usr/sbin/apmd
    79 ?        S      0:01 gpm -m /dev/mouse -t ps2
    94 ?        S      0:00 /usr/sbin/automount /auto file /etc/auto.misc
   106 tty1     S      0:08 -bash
   108 tty3     SW     0:00 [agetty]
   109 tty4     SW     0:00 [agetty]
   110 tty5     SW     0:00 [agetty]
   111 tty6     SW     0:00 [agetty]
[utmatning avklippt]

Flertalet av dessa processer startas vid systemstart på de flesta maskiner. Vi har dock gjort några förändringar i vårt system, så att erfarenheterna härvidlag förmodligen går isär. Emellertid kan man se de flesta av dessa processer i vilket system som helst. Som synes visar dessa växlar även de körande processernas växlar. Vi får här också några fler kolumner och en del annan intressant utmatning.

För det första lägger man märke till, att de flesta av dessa processer uppges köra på en tty vid namn »?«. Detta är processer, som startats ifrån en numera icke längre aktiv terminal. Därför är de heller inte längre bundna till någon särskild terminal.

För det andra finns här en ny kolumn: STAT. Den visar processens status (tillstånd). S står för sovande (sleeping); processen väntar på, att någonting skall hända. Z står för zombieprocess. En zombieprocess är en process, vars förälder har dött, så att barnprocessen är övergiven. Detta är inte bra.

Om man vill ha ännu mer information om processer, som är igång, kan man försöka med detta kommando:

   $ ps -aux
   USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
   root         1  0.0  0.0   344   80 ?        S    Mar02   0:03 init [3]
   root         2  0.0  0.0     0    0 ?        SW   Mar02   0:13 [kflushd]
   root         3  0.0  0.0     0    0 ?        SW   Mar02   0:14 [kupdate]
   root         4  0.0  0.0     0    0 ?        SW   Mar02   0:00 [kpiod]
   root         5  0.0  0.0     0    0 ?        SW   Mar02   0:17 [kswapd]
   root        11  0.0  0.0  1044   44 ?        S    Mar02   0:00 /sbin/kerneld
   root        30  0.0  0.0  1160    0 ?        SW   Mar02   0:01 [cardmgr]
   bin         50  0.0  0.0  1076  120 ?        S    Mar02   0:00 /sbin/rpc.port
   root        54  0.0  0.1  1360  192 ?        S    Mar02   0:00 /usr/sbin/sysl
   root        57  0.0  0.1  1276  152 ?        S    Mar02   0:00 /usr/sbin/klog
   root        59  0.0  0.0  1332   60 ?        S    Mar02   0:00 /usr/sbin/inet
   root        61  0.0  0.2  1540  312 ?        S    Mar02   0:04 /usr/local/sbi
   root        63  0.0  0.0  1796   72 ?        S    Mar02   0:00 /usr/sbin/rpc.
   root        65  0.0  0.0  1812   68 ?        S    Mar02   0:00 /usr/sbin/rpc.
   root        67  0.0  0.2  1172  260 ?        S    Mar02   0:00 /usr/sbin/cron
   root        77  0.0  0.2  1048  316 ?        S    Mar02   0:00 /usr/sbin/apmd
   root        79  0.0  0.1  1100  152 ?        S    Mar02   0:01 gpm
   root        94  0.0  0.2  1396  280 ?        S    Mar02   0:00 /usr/sbin/auto
   chris      106  0.0  0.5  1820  680 tty1     S    Mar02   0:08 -bash
   root       108  0.0  0.0  1048    0 tty3     SW   Mar02   0:00 [agetty]
   root       109  0.0  0.0  1048    0 tty4     SW   Mar02   0:00 [agetty]
   root       110  0.0  0.0  1048    0 tty5     SW   Mar02   0:00 [agetty]
   root       111  0.0  0.0  1048    0 tty6     SW   Mar02   0:00 [agetty]
[utmatning avklippt]

Här visas en hel mängd information. Här tillkommer upplysningar om vilken användare, som startat en process, hur stor andel av systemresurserna, en process använder (kolumnerna %CPU, %MEM, VSZ och RSS), samt vilket datum, processen har startats. Uppenbarligen är detta många upplysningar, som kan komma till nytta för en systemadministratör. Det visar en sak till: texten passerar skärmkanten, så att man inte ser allt. Det kan man lösa med flaggan -w.

Det är inte så vackert, men det fullgör sitt arbete. Vi har nu fått ut fullständiga listor över alla processer. Manualsidan för ps går på djupet med detta. Emellertid har vi här visat de mest omtyckta alternativen, som man oftast har anledning att ta i bruk.

kill.

Då och då händer det, att något program missköter sig, så att man måste tillrättavisa det. Det program, som brukas vid sådan maktutövning, heter kill(1), och det kan brukas vid hantering av processer på flera olika sätt. Det uppenbaraste sättet är bruket av kill till att döda någon process. Det behöver man göra, när ett program har skenat och slukar mängder av systemresurser, eller också när man bara är trött på, att det är igång och kör.

För att döda en process behöver man känna till dess PID eller dess namn. För att få tag i dess PID kan man använda kommandot ps, såsom det visats i föregående avsnitt. För att döda process nummer 4747, skulle man kunna kommendera följande:

   $ kill 4747
Lägg märke till, att man måste vara processens ägare för att få döda den. Detta är av säkerhetsskäl. Finge man döda processer, som andra startat, så skulle man kunna begå allehanda illdåd. Självfallet får root döda vilka som helst processer i systemet.

Det finns en annan avart av kommandot kill, som heter killall(1). Detta program gör precis det, som namnet säger: det dödar samtliga processer med ett visst namn. Om man skulle vilja döda alla vim-processer, som är igång, så skulle man kunna kommendera:

   $ killall vim
Vilka som helst och samtliga vim-processer skulle dö. Om root gjorde detta, skulle alla användares vim-processer dö. Detta för tanken till ett intressant sätt att sparka ut samtliga (sig själv inberäknat) ur systemet:

   # killall bash

Ibland räcker det inte med ett vanligt kill. Vissa processer vill inte dö med kill. Man får ta till en kraftigare form. Om det förhatliga PID 4747 inte hade svarat på vår kill-begäran, så skulle vi ha fått ta till följande:

   $ kill -9 4747
Detta skall nästan säkert döda process 4747. Man kan åstadkomma samma sak med killall. Detta sänder en annan signal till processen. Ett vanligt kill sänder signalen SIGTERM (terminate) till processen. Kommandot kill -9 sänder däremot signalen SIGKILL (kill) till processen. Det finns en hel lista över sådana signaler, som står till förfogande. Vi kan få se en sådan förteckning genom att kommendera följande:

   $ kill -l
     1) SIGHUP     2) SIGINT    3) SIGQUIT   4) SIGILL
     5) SIGTRAP    6) SIGABRT   7) SIGBUS    8) SIGFPE
     9) SIGKILL   10) SIGUSR1  11) SIGSEGV  12) SIGUSR2
    13) SIGPIPE   14) SIGALRM  15) SIGTERM  17) SIGCHLD
    18) SIGCONT   19) SIGSTOP  20) SIGTSTP  21) SIGTTIN
    22) SIGTTOU   23) SIGURG   24) SIGXCPU  25) SIGXFSZ
    26) SIGVTALRM 27) SIGPROF  28) SIGWINCH 29) SIGIO
    30) SIGPWR
Till kill måste man använda en siffra, medan namnet minus det inledande »SIG« kan användas till killall. Här följer ytterligare ett exempel:

   $ killall -KILL vim
Slutligen kan man använda kill till att starta om en process. Om man sänder en SIGHUP, så läser de flesta processer in sina inställningsfiler på nytt. Detta är till särskilt god hjälp, när man skall få systemprocesser att läsa in sina konfigureringsfiler efter det, att man har redigerat de senare.

top.

Slutligen finns ett kommando, som man kan använda till att visa efter hand förnyade upplysningar om de processer, som är igång i systemet. Detta kommando heter top(1) och det startas på följande vis:

   $ top
Detta visar en fullskärm med information om processer, som är igång i systemet, liksom en del allmänna upplysningar om systemet. Däri ingår genomsnittlig belastning, antal processer, CPU-tillstånd och information om ledigt minne samt enskildheter om processerna såsom PID, användare, prioritet, CPU- och minnesanvändning, körtid och programnamn.

 figure2142
: Kommandot top visar information om processer.

Det kallas top därför, att de CPU-intensivaste programmen visas överst. En intressant anmärkning är, att top står överst på de flesta inaktiva (och en del aktiva) system p.g.a. dess CPU-användning. Emellertid är top mycket användbart, när man skall avgöra, vilket program det är, som missköter sig och behöver dödas.

Sammanfattning.

Detta kapitel har diskuterat, vad en process är, och hur man kan styra den. Häri ingår läggande av processer i bakgrunden och förgrunden såväl som bruk av ps, top, och kill för att hålla dem rättade i ledet. Man bör nu kunna avgöra vilka processer, som är igång i systemet, och hur man skall bli av med dem, om de upphör med att uppföra sig ordentligt.


next up previous contents
Vidare: Grundläggande systemadministration. Uppåt: Att använda Slackware Linux. Tillbaka: Att hantera filer och


Denna översättning ifrån engelskan är utförd av Erik Jonsson <[email protected]> efter Slackware Linux Essentials, officiell handbok för Slackware Linux.

Denna översättning tillhandahålles liksom engelskspråkiga originalet enligt villkoren i GNU General Public License (GPL).
Uppgifterna om författarnas och översättarens namn får ej avlägsnas, utplånas eller eljest göras oläsliga.
Förvaras åtkomligt.
Bäst före: senaste ändringsdatum.
Äldre versioner bör förstöras.
Senast ändrad Tue Oct 24 09:36:13 CEST 2000

Hela boken finns här även beredd för utskrift i PDF-filen slwhbk.pdf.

http://www.slackware.com/http://www.sslug.dk/Ser bra ut i vilken vävläsare som helst.


Generaldepoten — Emil Tusens Kulturpalats.
Om goda kagor och torra kakor (»cookies«).

Innehåll:

Litteraturförteckning

Om goda kagor och torra kakor (»cookies«).