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