29/09/14 14:40
MasterK
Ciao a tutti,
il mio non è proprio un dubbio ma una richiesta di conferma a quello che ho scritto. Se ho fatto bene o meno.
Posto subito il codice:
Questa funzione prende in ingresso una lista i cui nodi contengono comandi da eseguire. Ogni processo deve eseguire un comando, e l'output di ogni comando deve essere scritto su un file di testo.
Ora, funzionare funziona, ma non sono convinto al 100% che vada bene.
Io mi faccio un for che cicla per tutta la lunghezza della lista, ad ogni ciclo faccio una biforcazione del processo con fork() e, se pid==0 vuol dire che quello è il figlio, quindi apro il file di output ed eseguo il comando con la funzione system(). Ma funziona proprio così? nel senso, è vero che i comandi vengono eseguiti in "parallelo" ognuno con un processo diverso? Oppure devo usare una funzione tipo exec per differenziare il programma che il processo esegue da quello che esegue il padre?
il mio non è proprio un dubbio ma una richiesta di conferma a quello che ho scritto. Se ho fatto bene o meno.
Posto subito il codice:
void run_command_in_parallel_mode(struct list* cmd){ int i; //Contatore del ciclo for pid_t pid; // Process identifier del processo generato con fork() struct node* tmp; tmp = cmd -> header; char filename[50]; for(i=0; i<cmd->count; i++){ //Contatore che cicla per tutta la lunghezza della lista pid = fork(); // Biforcazione del processo in Padre e Figlio. if(pid==0){ // Il processo figlio è stato generato printf("\nProcesso figlio con PID %d\tPPID %d\tVALORE DELLA i %d\tESEGUE %s\n", getpid(), getppid(), i, tmp->command); sprintf(filename, "out.%d", i+1); freopen( filename, "w", stdout); // Reindirizza stdout nel file destinazione system(tmp -> command); tmp = tmp -> next; }else{ printf("\nProcesso padre con PID %d e PPID %d\n", getpid(), getppid()); } } freopen( "CON", "w", stdout ); // Ripristina stdout }
Questa funzione prende in ingresso una lista i cui nodi contengono comandi da eseguire. Ogni processo deve eseguire un comando, e l'output di ogni comando deve essere scritto su un file di testo.
Ora, funzionare funziona, ma non sono convinto al 100% che vada bene.
Io mi faccio un for che cicla per tutta la lunghezza della lista, ad ogni ciclo faccio una biforcazione del processo con fork() e, se pid==0 vuol dire che quello è il figlio, quindi apro il file di output ed eseguo il comando con la funzione system(). Ma funziona proprio così? nel senso, è vero che i comandi vengono eseguiti in "parallelo" ognuno con un processo diverso? Oppure devo usare una funzione tipo exec per differenziare il programma che il processo esegue da quello che esegue il padre?
aaa