#include #include #include #include #include #include /* * * Quando il processo padre ha completato il suo lavoro, * manda un segnale di terminazione al processo figlio, * aspetta che il processo figlio termini * e poi termina anche il processo padre. * */ int main() { pid_t pid; pid = fork(); if (pid == -1) { perror("fork"); exit(1); } if (pid == 0) { // processo figlio // il processo figlio "fa qualcosa" for (;;) { // ciclo senza fine sleep(1); printf("[child]...\n"); } printf("[child] non passerĂ² mai di qua\n"); } else { // processo padre // il processo padre "fa qualcosa" printf("[parent] sto lavorando..."); sleep(5); printf("[parent] ho finito. " "ora faccio terminare il processo figlio\n"); // per fare terminare il processo figlio, // posso inviare, ad esempio, SIGINT if (kill(pid, SIGINT) == -1) { perror("kill"); } printf("[parent] invoco wait\n"); if (wait(NULL) == -1) { perror("wait"); } printf("[parent] bye\n"); exit(0); } return 0; }