next up previous contents
Next: D.2 Signali Up: D Komunikacija med procesi Previous: D Komunikacija med procesi Vsebina: contents

D.1 Nadzor procesov

Najenostavnejsa uporaba funkcije pri izvajanju drugih programov (procedur) je z ukazom kot je system("date"). Ta ukaz je podoben sinhronemu delovanju brez vracanja rezultatov. Funkcija system() vraca le status uspesnosti izvrsitve. Po koncanju funkcije se program normalno nadaljuje. Podobne so tudi funkcije exec(), ki v svojih variantah znajo iskati podani ukaz po podani poti (path) in za razliko od system(), nadomestijo originalni program z ukazom, ki je bil podan. Originalni program po zagonu ni vec aktiven in je zato potrebno pri takih ukazih prej zapreti vse aktivne komunikacije (odprte datoteke) s sistemom. Tako delovanje seveda najveckrat ni zazeljeno, zato se lahko uporabi kreiranje kopije originalnega procesa, v kateri se potem izvrsi ukaz execl(). V ta namen na sistemu UNIX obstaja funkcija fork(), ki kreira kopijo originalnega procesa (child process). Funkcija fork() vrne celostevilcno vrednost, ki je nic za kopijo (child), originalu pa vrne stevilko procesa kopije. Primer uporabe je sledec:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(void)
{
  pid_t pid;
  pid = fork();
  if ( pid )
     {
        int status;
        wait(&status);
        printf("Kopija procesa je imela stevilko %d\n", pid);
     }
  else
     printf("Pozdrav iz podprocesa\n");
  return 0;
}

Iz primera je razvidno, da original caka podproces, da konca. Ce ga ne bi cakal s funkcijo wait(), bi vsak program odbrzel v svoji smeri. Pri kreiranju podprocesov je pomembno tudi to, da vsi opisniki odprtih datotek delujejo tudi v podprocesih. V podprocesu bi lahko uporabili tudi eno izmed funkcij exec() in s tem pognali zunanji program. Ko je podproces koncal, je original dobil status o koncanju podprocesa in bi lahko glede na to ustrezno ukrepal. Za aktivno komunikacijo med procesi, pa je potrebno uporabiti dodatne funkcije, ki omogocajo razlicne nacine komunikacije, kot so cevi, imenovane cevi, semaforji, vrste, deljeni spomin, vticnice, tokovi (pipes, FIFOs, semaphores, message queues, shared memory, sockets, streams).



Copyright © 1995 Leon Kos, Univerza v Ljubljani