Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio15:esercitazionia:esercitazione7

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
informatica:sol:laboratorio15:esercitazionia:esercitazione7 [27/04/2015 alle 19:50 (10 anni fa)] – creata Massimo Torquatiinformatica:sol:laboratorio15:esercitazionia:esercitazione7 [28/04/2015 alle 16:11 (10 anni fa)] (versione attuale) Massimo Torquati
Linea 40: Linea 40:
 } }
 </code> </code>
 +
 +===== Esercizio 2 =====
 +
 +Scrivere un programma che prende un intero N come argomento e crea N processi zombies.
 +
 +===== Esercizio 3 =====
 +
 +Scrivere un programma chiamato ''pszombies'' che stampa il pid dei processi zombies presenti nel sistema 
 +utilizzando una pipeline di 3 processi. 
 +Il primo processo esegue il comando ''ps -A -ostat,pid'' e fornisce l'input al secondo processo che esegue 
 +il comando ''grep -e [zZ]'' e che a sua volta fornisce l'input al terzo processo che esegue il comando 
 +''awk {print $2}''. L'aoutput deve essere equivalente al comando shell:\\
 +<code>
 +bash $> ps -A -ostat,pid | grep -e [zZ] | awk '{print $2}'
 +</code>
 +
 +PS: per testare il programma utilizzare il programma prodotto nell'esercizio 2.
 +
 +===== Esercizio 4 =====
 +
 +Considerare il seguento programma ''dec.c'':
 +<code>
 +#include <stdlib.h>
 +#include <stdio.h>
 +#include <unistd.h>
 +#include <errno.h>
 +
 +#define SYSCALL(r,c,e) if((r=c)==-1) { perror(e);exit(errno); }
 +int main(int argc, char *argv[]) {
 +    int  x,r;
 +    if (argc>1) {
 + x = atoi(argv[1]);
 + if (x<0) goto fine;
 + SYSCALL(r, write(1, &x,sizeof(x)),"write1");
 +    }
 +    do {
 + SYSCALL(r,read(0, &x,sizeof(x)),"read");
 + if (r==0) { 
 +     fprintf(stderr, "Processo %d, esco perche' lo standard input e' chiuso!\n", getpid());
 +     return 0;
 + }
 + fprintf(stderr, "Processo %d, ricevuto %d\n", getpid(),x);
 + --x;
 + if (x<0)  break;
 + SYSCALL(r, write(1, &x,sizeof(x)), "write2");
 +    } while(1);
 + fine:
 +    fprintf(stderr, "Processo %d, esco perche' raggiunto valore negativo\n", getpid());
 +    return 0;
 +}
 +</code>
 +Scrivere un programma (''pipedec'') che prende in ingresso un intero positivo, quindi lancia 2 processi figli ognuno dei quali esegue l'eseguibile del programma ''dec''. Solo ad uno dei due processi figli viene passato come argomento l'intero positivo passato al programma ''pipedec''. I due processi figli devono essere connessi tra di loro in modo tale che lo standard input di un processo sia connesso con lo standard output dell'altro processo (la connessione e' quindi bidirezionale).
 +
 +
informatica/sol/laboratorio15/esercitazionia/esercitazione7.1430164236.txt.gz · Ultima modifica: 27/04/2015 alle 19:50 (10 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki