Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <signal.h>
- #include <sys/wait.h>
- int pid0;
- void p1_handler(int signo);
- int main(int argc, char * argv[]) {
- int pid1, status;
- int N, cont=0;
- if (argc != 2){
- fprintf(stderr, "P0: Numero di argomenti non valido\n");
- exit(0);
- }
- N = atoi(argv[1]);
- pid0 = getpid();
- pid1=fork();
- if(pid1==0){
- signal(SIGALRM, p1_handler);
- alarm(N);
- while(1){
- printf("Hello World %d\n", cont++);
- sleep(1);
- }
- }
- else if(pid1>0){
- printf("Padre: ecco il mio pargolo, %d\n", pid1);
- }
- else {
- perror("P0: Impossibile generare P1\n");
- exit(-1);
- }
- //papa saspetts figlio e stampa le sue info
- for (int i=0; i<2; i++){
- int pid_term = wait(&status);
- if (pid_term < 0){
- perror("Padre: Errore durante la wait\n");
- exit(5);
- }
- if ( WIFEXITED(status) ){
- printf("Padre: Figlio con pid=%d terminato con stato di terminazione %d\n",pid_term, WEXITSTATUS(status));
- }
- else if ( WIFSIGNALED(status) ){
- fprintf(stderr, "Padre: Figlio con pid=%d terminato dal segnale num. %d\n", pid_term, WTERMSIG(status));
- }
- }
- return 0;
- }
- void p1_handler(int signo){
- kill(pid0, signo);
- exit(1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement