4.7. Proces-kontrol

Når du starter et program op, bliver det til et kørende program. Et kørende program kaldes i UNIX-sammenhænge for en proces (eng. "process"). Hver proces har en unik indikator, som er et heltal. Vi kalder denne indikator for PID, hvilket kommer af det engelske "Process IDentifier".

4.7.1. ps viser processer

Hvis du vil se, hvilke programmer du har kørende, kan du bruge kommandoen ps. ps er en forkortelse for "process".

[daisy@linus daisy]$  ps
  PID TTY STAT TIME COMMAND
  435  2   S   0:00 /bin/login -- daisy
  436  2   S   0:00 -bash
  447  2   R   0:00 ps
[daisy@linus daisy]$ 

Ovenstående dialog viser, at der er et kørende program (ps) og to sovende (/bin/login og bash). At et program er kørende, ser du ved, at der under STAT står et "R" (for "running"), mens et sovende program i status-feltet har et "S" (for "sleeping"). En sovende proces er en proces, som er blevet startet, men ikke er aktiv, og nu står og venter på at blive aktiveret. Feltet, hvor der står TTY, viser, fra hvilken terminal programmet blev startet. I Linux kan du skifte mellem flere virtuelle konsoller, og hver virtuel konsol opfattes som en terminal.

4.7.2. Få et bedre overblik ved at bruge top

Som du så i foregående afsnit, kan ps bruges til at få et overblik over, hvilke processer du har kørende. Problemet er, at du kun får et statisk billede. Hvis du er interesseret i et mere dynamisk billede af din computers processer, kan du bruge programmet top. top opdaterer skærmen hvert femte sekund. Ved at trykke på "i" skifter du mellem "non-idle mode" og almindelig mode. I "non-idle mode" ser du kun de processer, som er aktive, mens du i almindelig mode ser alle. Du afslutter top ved at trykke på "q".

top leverer mange oplysninger, og derfor er det spændende at bruge programmet. Endvidere er det værd at læse programmets man-page.

4.7.3. At køre programmer i baggrunden

Alle de kommandoer, vi har præsenteret dig for i dette kapitel, har taget meget kort tid at udføre. Antag, at du ønsker at køre et program (lad os kalde det ventetid), som tager en time at udføre. Hvis du nu startede programmet op på kommandolinjen, kunne du ikke udføre andre kommandoer i en time, da du ikke kunne komme til at taste nye kommandoer ind. Det er naturligvis ikke så smart, især ikke da Linux er et ægte multitasking styresystem!

Du kan løse dit ventetidsproblem ved at udføre ventetid i baggrunden. For at udføre et program i baggrunden sætter vi et & efter kommandoen.

[daisy@linus daisy]$ ventetid &
[1] 585
[daisy@linus daisy]$ ps
  PID TTY STAT TIME COMMAND
  435  2   S   0:00 /bin/login -- daisy
  436  2   S   0:00 -bash
  447  2   R   0:00 ps
  585  2   R   0:02 ventetid
[daisy@linus daisy]$ 

Programmet ventetid kører nu samtidig med, at du kan indtaste og udføre nye kommandoer. Grunden til, vi siger, at programmet kører i baggrunden, er, at du ikke sidder med det ved din konsol (som vi så kalder for forgrunden).

Det kan i øvrigt nævnes at glemte du &, så kan du trykke Ctrl-z og så har du suspenderet jobbet (eng. "suspended"). Med fg (eng. "foreground") og bg (eng. "background") kan du styre hvad er aktivt.

4.7.4. Dræb en proces

Nu kan det ske, at du har fået startet et program op, som du bliver træt af. Du vil altså gerne afbryde det, inden det er kørt færdigt. UNIX-verdenen er barsk, for man taler ikke om at afbryde en proces, men om at slå den ihjel (eng. "kill"). Når du vil slå en proces ihjel, kan du bruge kommandoen kill. Som argument til kill giver du PID. Nedenfor er vist et eksempel.

[daisy@linus daisy]$ ps
  PID TTY STAT TIME COMMAND
  435  2   S   0:00 /bin/login -- daisy
  436  2   S   0:00 -bash
  447  2   R   0:00 ps
  585  2   R   2:34 ventetid
[daisy@linus daisy]$ kill 585
[daisy@linus daisy]$ ps
  PID TTY STAT TIME COMMAND
  435  2   S   0:00 /bin/login -- daisy
  436  2   S   0:00 -bash
  763  2   R   0:00 ps

Det skal også nævnes, at enkelte gange kan en proces være kørt helt i skoven, og så må du tage kraftigere skyts i brug. I stedet for kill PROCESNUMMER kan du bruge kill -9 PROCESNUMMER.

4.7.5. suid

Normalt vil det være sådan, at når du starter et program op, f.eks. kommandoen ls, vil Linux køre dette program som den bruger, der startede programmet. Nogle gange kan det være nødvendigt at give en bruger flere rettigheder uden at skulle give personen superbrugerstatus, dvs. root-status.

Suid (set user id) et et begreb (ikke program), som giver mulighed for, at du kan udføre et program, som om du var en anden bruger. Dette bruges normalt til at give almindelige brugere rettigheder til at udføre programmer, som om de var superbrugeren (root).

[daisy@linus daisy]$ chmod +s FILNAVN
Når kommandoen FILNAVN udføres, vil Linux-kernen køre programmet med rettighederne for brugeren, der ejer filen, og ikke som brugeren, der starter programmet.

Dette kan f.eks. ses ved programmet ping, der skal være suid root. Dette skyldes, at det kun er root, der kan åbne den slags netværksforbindelse, som ping bruger.

[daisy@linus daisy]$ ls /sbin/ping
-rwsr-xr-x   1 root     root        14804 Apr  7 23:21 /bin/ping

Suid er den største sikkerhedssynder på et UNIX-system. Det er f.eks. en dødssynd at lave shell scripts suid root, da det er muligt for en bruger at narre scriptet til at efterlade en superbruger shell. Jo færre suid filer du har på dit system jo bedre, men nogle ting er nødt til at være suid root for at fungere. Du kan se hvilke filer, der er suid root med følgende kommando:

[daisy@linus daisy]$ find / -user root -perm +4000

Se mere i artiklen http://www.sslug.dk/artikler/Linux_sikkerhed/rootaccess.html om problemer med Suid.