I3MUP1+-+Exercise+6.1

=Exercise 6.1 - Processes in Linux=

Exercise 1 - Simple process creation
For at lave en ny tråd kaldes funktionen fork fra biblioteket  fork returnere en process id (pid). Der er dog forskel på denne process id og systemets process id. fork vil returnere -1 hvis det ikke var muligt at oprette en child tråd. Hvis den kunne oprettes vil der derfor køre to processer. De skelnes med netop denne pid. child process vil have en pid på 0 og fork returnere childs system process id for parent.



Med funktionen getpid returneres system process id. Her ses et output fra programmet. Det er tydeligt at se at fork returnere childs system process id i parent processen.



Exercise 2 - Waiting for child processes to complete
Fremgangsmåden er: 1. fork 2. sæt child process til at udføre noget 3. fork 4. sæt child process til at gøre noget 5. sæt parent process til at vente

Det er vigtigt i punkt 2 at child processen stopper når den er færdig, så den ikke går videre til punkt 3 Det sikres ved at slutte punkt 2 med komandoen _exit(0), som får processen til at terminere.

I parent processen skal funktionen wait(void*) kaldes. Denne er defineret i biblioteket  Den venter indtil en child process terminere. Hvis der køres flere processer, vil det være den første som terminere. Derfor skal wait kaldes 2 gange i vores kode. Vi ønsker at vente til begge child processer er færdige. Ønskes det at vente på en bestemt process kan funktionen waitpid kaldes.

Exercise 3 - A command line interpreter (CLI)
Med udgangspunkt i det udleverede handout implementeres executeCommand Vi ønsker at vores child process skal udføre et helt andet program end parent, så funktionen execv kaldes. Den tager to parametre. første parameter er programmet som skal udføres. Anden parameter er et array af argumenter til programmet inklusiv programmet og NULL. eksempelvis args[3] = { program, arg1, arg2, NULL }

1. findes program navn og argumenter 2. fork 3. child udføre execv med navn og argumenter 4. parent skal vente til program er kørt

execv returnere kun hvis der skete en fejl, som program ikke findes eller forkert argument. når programmet er færdig termineres child processen.