programmera.net -> linux -> normal     för utskrift      info@programmera.net

Processer i Linux

  Kommando    Exempel  Beskrivning
  ps  ps -ef  Visa en full beskrivning av alla processer på maskinen.
  pstree  pstree  Visa alla processer på maskinen i form av ett förälderträd.
  top  top  Visa de processer som slukar mest processortid.
  time  time tar -cf foo.tar *  Tar tid på hur lång tid det tar att packa ihop alla filer till en tarfil.
  kill  kill -9 httpd  Avsluta processen httpd.
  killall  killall  .
  &  emacs &  Startar Emacs utan att prompten väntar på att Emacs ska avslutas.
  wait  wait 32211  Vänta tills processen 32211 har avslutats.
  jobs    Visar de processer som du har startat i bakgrunden.
  fg  fg %2  Starta ett väntande program.
  bg  bg %2  Starta ett väntande program i bakgrunden.
  nice  nice calculatescript  Starta scriptet calculatescript med låg prioritet.
  renice  renice 32211  Sänk prioriteten på processen 32211.

På denna sida beskrivs hur du hanterar processerna på din dator. En process är en lista av operationer, så kallad maskinkod, som en dator genomför i ordning. När man startar ett program så startas en eller flera processer som utför själva arbetet. Ibland måste en process köra mycket lång tid innan alla operationer har genomförts, och då är det bra att kunna övervaka processen med de kommandon som beskrivs på denna sida.

Alla tjänster som är igång på datorn är också processer. Det som är speciellt med tjänster är att de aldrig kör klart, när de inte används ligger de inaktiva och konsumerar mycket lite processortid. Tjänster har ofta ett namn som slutar på d (deamon). Exempel på tjänster är databaser, webbservrar (httpd) och kommunikationsprogram (ftpd, sshd, ..).

Hur kan datorn ha flera processer igång samtidigt? Jo, processorn hoppar mellan olika processer så snabbt att det verkar som processerna kör samtidigt. Med kommandot  ps -u  går det bl. a. att få information om hur mycket processortid en enskild process totalt har förbrukat, och hur mycket minne den använder just nu. Om du vill ta tid på en program som avslutas på bara någon minut kan du istället använda  time .

En process har alltid en förälderprocess som den rapporterar till när den har fullgjort sin uppgift. Varje process har ett processid (ett nummer) som är unikt för processen på datorn.

Den första processen som startas på datorn är init och har processid 1. Init startar några andra processer som i sin tur startar nya. Init är så att säga stamfader till alla övriga processer på datorn.


ps

Flagga  Betydelse  Beskrivning
ps -a     Visar alla relevanta processer som din användare äger.
ps -e  everything  Listar alla processer på datorn.
ps -f  full  Visar en detaljerad beskrivning av processerna med ägare och förälderprocess m.m.
ps -l  long  Visar en detaljerad beskrivning än processerna liknande flagga -f fast med fler kolumner.
ps -u  user  Visar en detaljerad beskrivning av processerna med ägare och minnesutnyttjande m.m.

Kommandot står för processes och visar processer. Om man inte använder några flaggor får man se de processer man själv har startat:
[olle@dev1]$ ps
  PID TTY          TIME CMD
 3949 pts/0    00:00:00 bash
 4046 pts/0    00:04:36 emacs
 2174 pts/0    00:00:00 ps
I detta fall visas skalprocessen bash, emacs och kommandot ps självt. De olika kolumnerna står för:

Kolumner Beskrivning
PID  Processid. Det unika nummer som identifierar processen.
TTY  Vilken terminal kommandot anropats från. Ovan så visas bara en användars processer och därför är terminalen den samma för alla processer.
TIME  Den processortid processen totalt har förbrukat.
CMD  Programmets/kommandots namn.

Ofta vill man se alla processer som körs på datorn. Då använder man sig av flaggan e (everything):
[olle@dev1]$ ps -e
  PID TTY          TIME CMD
    1 ?        00:02:01 init
    2 ?        00:00:08 kflushd
    3 ?        00:08:33 kupdate
    4 ?        00:00:06 kswapd
    5 ?        00:00:00 keventd
    
  ...  (en masssa processer)  ...
      
  411 ?        00:00:00 atd
  425 ?        00:00:15 crond
  443 ?        00:00:00 inetd
  682 ?        00:01:39 mysqld
11268 ?        00:03:15 httpd
 7777 ?        00:05:12 sshd

  ...  (en masssa processer)  ...
     
 3949 pts/0    00:00:00 bash
 4046 pts/0    00:04:36 emacs
 2175 pts/0    00:00:00 ps
De första processerna med låga nummer är de första som startas. Här hittar man också alla tjänster som är igång på datorn. Om man vill ha en lite mer detaljerad beskrivning av varje process kan man använda flaggan f (full):
[olle@dev1]$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
olle      3949  3947  0 Aug06 pts/0    00:00:00 bash
olle      4046  3949  0 Aug06 pts/0    00:04:36 emacs
olle      2177  3949  0 12:28 pts/0    00:00:00 ps -f
Här ser vi några extra kolumner som måste förklaras.

Kolumner Beskrivning
UID  Användaren som äger processen. Många systemprocesser ägs av root.
PPID  Förälderprocessens id. Förälderprocessen är den process som startade och därför har ansvar för den beskrivna processen.
C  Om schemaläggning är involverad.
STIME  Den tid då processen startades.

Ett annat sätt är att få en detaljerad beskrivning är att använda flaggan u (user).
[olle@dev1]$ ps -u
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
olle      3949  0.0  0.1  1756 1020 pts/0    S    Aug06   0:00 bash
olle      4046  0.0  0.8  9600 8008 pts/0    S    Aug06   5:17 emacs
olle      9689  0.0  0.0  2328  696 pts/0    R    15:27   0:00 ps -u
Här dyker ännu några nya kolumner upp som behöver förklaras:

Kolumner Beskrivning
%CPU  Hur stor del av processorns tid som processen tar just nu.
%MEM  Hur stor del av tillgängligt minne processen konsumerar just nu.
VSZ  Virtual size. Virtuellt minnesutnyttjande.
RSS  Resident size, alltså hur mycket minne processen konsumerar i kilobyte.
STAT  Status, beskrivs nedan...
START  Tidpunkten då processen startade.

Kolumen STAT beskriver alltså processens status. Nedan listas de olika typer av status processen kan anta:

Status Beskrivning
D  Processen väntar på disk.
R  Processen kör (running).
S  Processen sover (sleeping).
SW  Processen sover i väntan på att en kärnfunktion ska avslutas.
T  Processen är temporärt stoppad, men kan köra.
Z  Processen är en zombie, d.v.s. vill avsluta men kan inte. En zombie gör ingen nytta och det är riskfritt att döda en process med detta tillstånd.


pstree

Kommandot står för process tree och ritar upp en trädstruktur över föräldraskapet mellan processer. Med detta kommando kan man få en överblick över vilken process är förälder till vilken.
top

Detta kommando visar de processer som slukar mest processortid i sjunkande ordning. Detta kommando är specialkonstruerat för ett speciellt problem: datorn går för långsamt. Vanligtvis utnyttjas processorn för hårt, vilket man ser genom att titta på siffran famför idle. På system med lågt processorutnyttjande är siffan ofta 98%, alltså är processorn sysslolös 98% av tiden.

Ett annat problem är för många zombieprocesser. En zombieprocess är en process som väntar på att avsluta men inte kan. Det kan vara bra att undersöka föräldern till zombieprocessen som kan tipsa om varför zombieprocessen uppkommer.

Såhär kan en körning av top se ut:
[olle@dev1]$ top 
  3:17pm  up 48 days, 22:32,  5 users,  load average: 0.20, 0.07, 0.01
103 processes: 102 sleeping, 1 running, 0 zombie, 0 stopped
CPU states:  1.8% user,  0.7% system,  0.0% nice, 97.3% idle
Mem:   971500K av,  908280K used,   63220K free,  279976K shrd,  419496K buff
Swap:  265032K av,       0K used,  265032K free                  218532K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT  LIB %CPU %MEM   TIME COMMAND
 4046 olle      13   0  8012 8012  3028 S       0  2.9  0.8   5:16 emacs
 9180 olle      16   0   896  896   668 R       0  1.7  0.0   0:03 top
 3947 olle       3   0  3084 3084  1640 S       0  0.5  0.3   0:02 xterm
    1 root       0   0   476  476   404 S       0  0.0  0.0   2:01 init
    2 root       0   0     0    0     0 SW      0  0.0  0.0   0:08 kflushd
De första raderna i top innehåller information som beskriver det allmänna tillståndet på datorn. Från den översta texten kan vi lista ut att datorn har kört utan avbrott i 48 dagar, och att 5 användare är anslutna. Vi har 103 processer igång och 97.3% av tiden är processorn sysslolös. Efter de första raderna listas de tyngsta processerna. Några av de viktigaste kolumnerna är:

Kolumner Beskrivning
PID  Processid.
USER  Användaren som startat processen.
SIZE  Antal kilobyte minne processen tar upp.
STAT  Status. De olika tillstånden beskrivs under ps.
%CPU  Hur stor del av processorns tid som processen tar just nu.
%MEM  Hur stor del av tillgängligt minne processen konsumerar just nu.
TIME  Hur mycket processortid processen totalt har förbrukat.
COMMAND  Programmets/kommandots namn.



Kommandon Beskrivning
h  Visar hjälp.
q  Avslutar top.
s  Sätter uppdateringstiden till det antal sekunder du väljer.
u  Visar bara en användares processer.


time

Med detta kommando kan man mäta tiden det tar för ett program att köra. Detta kan vara bra om man är programmerare och vill jämföra prestandan för olika lösningar. Här har vi ett exempel:
[olle@dev1]$ time tar -cf a.tar *
0.00user 0.02system 0:00.08elapsed 23%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (294major+25minor)pagefaults 0swaps

kill

Flagga  Betydelse  Beskrivning
kill -1 %1  HUP  Ger en signal till processen som betyder att dess inmatning är färdig.
kill -2 %1  INT  Ger em signal till processen som betyder att användaren har tryckt Ctrl+c. Kan ignoreras av programmet som kan fånga signalen och välja att inte avsluta vid Ctrl+c (som t. ex. Emacs).
kill -3 %1  QUIT  Ger en signal tíll processen som betyder att användaren har tryckt Ctrl+/. Detta innebär ett felaktigt avslut, och tvingar programmet att göra en felutskrift, en s. k. core dump. Kan ignoreras av programmet.
kill -9 %1  KILL  Avslutar processen omedelbart. Kan inte ignoreras av programmet.
kill -15 %1  TERM  Ger samma signal till processen som ges då datorn ska stängas av.
kill -19 %1  STOP  Ger en signal till processen som betyder att användaren har tryckt Ctrl+z. Detta innebär att processen ska stoppas men inte avslutas, så att man kan starta den senare med fg eller bg.
kill -l  list  Listar alla signaler som finns på ditt system.


killall

Flagga  Betydelse  Beskrivning
-i     .
-w     .


&


wait


jobs

Flagga  Betydelse  Beskrivning
jobs -     .
jobs -p     .
jobs -n     .


fg


bg


nice


renice