/* Esempio di exec .... * Quando un processo figlio finisce al padre viene * inviata la SIGCHLD. In questo esempio viene quindi * mostrato anche l'uso della SIGCHLD .... */ /* Quesito : Nel caso in cui l'output venga rediretto su file, la * prima printf del processo padre puo' stampare lo stesso messaggio * per due volte. Se l'output invece viene stampato su video, questo * non avviene mani. Sapete spiegare il perche' ? */ #include #define __USE_POSIX #include #include #include "myutils.h" int main (void) { pid_t child; /* Array usato nell'esempio per passare i parametri * al task generato tramite una exec */ char *array[3] = {"arg1", "arg2", "arg3"}; if ((child = fork()) < 0) sys_err("Errore nella fork"); else if (child == 0) { /* A questo punto sono nel figlio */ printf("Processo figlio ... padre = %d\n", getppid()); /* Scommentare la linea seguente e commentare quella * ancora dopo per vedere le differenze far i due tipi * di passaggio di parametri alla exec. */ /*if (execlp("figlio", "figlio", "arg1", "arg2") < 0){*/ if (execvp("figlio", array) < 0) sys_err("E' fallita la exec"); /* se va a buon fine, la exec non ritorna! */ } else { /* Sono nel processo padre */ printf("Processo padre .... pid_t = %d\n", getpid()); sleep(1); } return 0; }