Difference between revisions of "ProvaPratica 2009.01.15"

From Sistemi Operativi
Jump to navigation Jump to search
(Created page with "<h1>http://www.cs.unibo.it/~renzo/so/compiti/2009-01-15.pdf</h1> == Esercizio 1 == <syntaxhighlight lang="C"> #include <stdio.h> #include <stdlib.h> #include <unistd.h> i...")
 
 
Line 2: Line 2:
  
  
== Esercizio 1 ==
+
== Esercizio 1 e 2 ==
  
 
<syntaxhighlight lang="C">
 
<syntaxhighlight lang="C">
 +
/*
  
 +
Esercizio1 (obbligatorio): (15 punti) Scrivere un programma in linguaggio C "respawn" che provveda a riattivare un
 +
programma quando questo termina (Naturalmante o erroneamente). Es:
 +
respawn test a b c
 +
lancia il programma "test a b c". Se e quando questo dovesse terminare ne viene lanciato un altro uguale.
 +
 +
Esercizio 2: completamento dell'esercizio 1. (5 punti)
 +
Modificare il programma dell'esercizio 1 per riattivare il programma solo se termina in modo anormale (per un segnale)
 +
 +
*/
 
#include <stdio.h>
 
#include <stdio.h>
 
#include <stdlib.h>
 
#include <stdlib.h>

Latest revision as of 15:05, 28 April 2014

http://www.cs.unibo.it/~renzo/so/compiti/2009-01-15.pdf


Esercizio 1 e 2

/*

Esercizio1 (obbligatorio): (15 punti) Scrivere un programma in linguaggio C "respawn" che provveda a riattivare un 
programma quando questo termina (Naturalmante o erroneamente). Es:
respawn test a b c
lancia il programma "test a b c". Se e quando questo dovesse terminare ne viene lanciato un altro uguale.

Esercizio 2: completamento dell'esercizio 1. (5 punti)
Modificare il programma dell'esercizio 1 per riattivare il programma solo se termina in modo anormale (per un segnale)

*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc,char*argv[])
{
	int ris;
	ris=fork();
	while(ris>0)
	{
		printf("%d\n",ris);
		wait(&ris);
		if (WIFSIGNALED(ris))
			ris=fork();
		else
			return(0);
	}
	execvp(argv[1],argv+1);
	return(0);
}

stefano92