[ACC-Logo]

processer

[ACC Hemsida] [Hjälp] [Information] [Index]

[This information is only available in Swedish]


När man skriver ett kommando (eller klickar på exempelvis netscape-ikonen) så startas ett program. Så länge ett program körs så kallar man det en process, man skulle kunna säga att generellt gäller det att en UNIX process är en exekvering (man startar och kör ett program) av ett program eller kommando.

Det finns ett flertal olika kommandon som låter dig hantera processer som tillhör dig. Du kan inte göra något åt processer som tillhör någon annan användare (endast systemadministratörer kan hantera andras processer).
När man skriver in ett kommando i shellprompten (det fönster som man skriver kommandon i, t.ex. i en xterm), så forkar shellet en barnprocess i vilken kommandot exekveras. Med att forka så menar man att man skapar en ny process. Den nya processen (barnprocessen) är en exakt kopia av förälderprocessen, och den ärver alla attribut som tillhör förälderprocessen. (Om du inte förstår allt detta tekniska-mumbojumbo så gör det ingenting).

Förälderprocessen (shellet) väntar på att kommandot skall köras klart och att barnprocessen skall dö, barnprocessen dör automatiskt när den är klar. Fram tills dess kan man inte skriva in ett nytt kommando. Kommandon som körs på detta vis kallas förgrundsprocesser. Så fort kommandot är klart och barnprocessen är död så återaktiveras förälderprocessen, shellprompten återvänder, och användaren får möjlighet att skriva in ett nytt kommando.
Hur avbryter man en förgrundsprocess?
För att avbryta den process som nu körs så trycker man följande knappkombination
         Ctrl-c
 
Dvs håll ner knappen markerat Ctrl och tryck sedan ned knappen markerat C. Detta avbryter den nuvarande förgrundsprocessen helt, den kommer helt enkelt att sluta att existera.
Hur pausar (suspenderar) man en förgrundsprocess?
För att suspendera den process som nu körs så trycker man följande knappkombination
         Ctrl-z
 
Dvs håll ner knappen markerat Ctrl och tryck sedan ned knappen markerat med Z. Detta suspenderar den nuvarande förgrundsprocessen.
Hur placerar jag en förgrundsprocess i bakgrunden?
Det första man måste göra är då är att suspenderar förgrundsprocessen, sedan så skriver man kommandot bg (background), för att flytta processen till bakgrunden.
För att köra en process i bakgrunden samt att man själv vill fortsätta jobba så lägger man till ett & på slutet av kommandot.
Exempel: (% är bara ett shellprompt-tecken, som EJ skall skrivas in)
        % Netscape &
        [1] 1234
Detta gör att shellet forkar en barnprocess som kör kommandot och visa jobbnumret ([n]) samt PID (Process IDentifier). Shellprompten återvänder och man kan skriva fler kommandon.

Man skall inte köra interaktiva kommandon som kräver att man skriver något vid terminalen som ett bakgrundsjobb. Om man ändå gör det så kommer jobbet att stanna upp och vänta på användarinput. Då måste man döda processen som jobbet tillhör, alternativt sätta den till förgrunden och svara på efterfrågad inmatning.
De flesta shellen har inbyggt kommandon för att hantera bakgrundsjobb.
Lista aktiva jobb
För att visa tillståndet hos eventuella bakgrundsjobb så använder man jobs kommandot.
Exempel:(% är bara ett shellprompt-tecken, som EJ skall skrivas in)
        % jobs
        [1]  + Running              xterm -g 90x55
        [2]  - Running              xterm -g 90x55
Detta visar jobbnummer, dess tillstånd samt vilket kommando som är associerat med olika jobb. För att visa PID så får man lägga till en -l option till jobs.
Exempel:(% är bara ett shellprompt-tecken, som EJ skall skrivas in)
        % jobs -l
        [1]  +  3584 Running              xterm -g 90x55
        [2]  -  3587 Running              xterm -g 90x55
Ta fram jobb till förgrunden
För att plocka fram ett specifikt jobb till förgrunden så utnyttjar man kommandot fg (foreground) följt av %jobbnummret (OBS. inget mellanslag mellan % och jobbnummret).
Exempel:(% först på raden är bara ett shellprompt-tecken, som EJ skall skrivas in)
	% jobs
        [1]  +  Running              xterm -g 90x55
        [2]  -  Running              xterm -g 90x55
        [3]     Running              lpr -Passi acc-text.ps
        % fg %3
        lpr -Passi acc-text.ps
Detta gör att jobbet lpr kommer i förgrunden.
För att övervaka tillstånden hos processer så använder man kommandot ps
        ps [-option]
I UNIX-världen så är icke-nödvändiga optioner till kommandon satta inom [].
Vilka options man kan använda beroende lite på vilken typ av UNIX-system man använder. För att vara på den säkra sidan så kan det vara klokt att läsa mansidan (en on-line referensmanual) till ps, den får man fram genom att skriva man ps.
Ett exempel på användandet av ps:(% är bara ett shellprompt-tecken, som EJ skall skrivas in)
	% ps -u användarnamn
        PID  TTY      TIME CMD
        3800 pts/24   0:01 tcsh
resulterar i en lista över alla processer som ägs av användarnamn visas
Varje process som man startar upp blir ofta färdig inom några sekunder. Men ibland händer det att bakgrundsprocesser eller processer utan en kontrollerande terminal hänger sig, då måste man förstöra processen genom att döda den. För att döda en process så har man kommandot kill till sin hjälp.
        kill [-signal] processidentifierare
I UNIX-världen så är icke-nödvändiga optioner till kommandon satta inom [].
För att få fram processidentifierare (PID) så använder vi kommandot ps som tidigare beskrivits.
Försök alltid först att döda en process med ett enkelt kill kommando
        kill processidentifierare
Detta är det snyggaste sättet att döda en process, det har ungefär samma effekt som att avbryta en process.

Om det inte fungerar använd -1 signalen
	kill -1 processidentifierare
Detta säger åt processen att "lägga på", precis som om du höll på att logga ut. Systemet försöker döda alla barnprocesser.

Som sista utväg så har vi -9 signalen
        kill -9 processidentifierare
Detta slår ihjäl processen hårt och brutalt, dock så kan den lämna kvar eventuella barnprocesser som fortsätter att köra.

Det går även att kombinera optioner till kill kommandot.
Exempel:
	kill -9 -1  
Detta kill kommando dödar (stoppar) alla nu pågående processer som ägs av användaren som skriver kommandot.