|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2005
Città: foggia
Messaggi: 232
|
PROGRAMMAZIONE DI SISTEMA UNIX: GESTIONE DEI PROCESSI
Salve,
volevo porvi un problema che mi sono ritrovato durante l'elaborazione di un programma c/c++ riguardo la gestione dei processi in unix. Dovrei sviluppare un programma che crea un processo figlio tramite fork() il quale ricorsivamente chiama il programma stesso, pero devo creare un contatore che si decrementa a ogni chiamata e di conseguenza quando questi è uguale a 0 deve terminare il programma. Io ho utilizzato ovviamente la funzione della famiglia exc, excve passando il contatore come una variabile d'ambiente e decrementandola ogni chiamata; pero il programma mi esegue un solo ciclo, entra nella excve e poi termina. Questo è il mio codice: ////////////////////////////////////////////////////////////// #include <sys/types.h> #include <sys/stat.h> #include <sys/wait.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <time.h> #include <stdlib.h> #include <errno.h> int main (int argc, char *argv[], char *envp[]) { char *ch=getenv("N"); int i=atoi(ch); pid_t pid; printf(" %s\n ", ch); if((pid=fork())==0) { printf(" contatore %d, creazione\n", i); i=i-1; sprintf(ch, "%d", i); printf(" %s\n ", ch); setenv("N", ch, 1); char *arg[]={ (char*)0 }; char *env[]={"N", (char*)0}; if(i>0){ printf("Entrato\n"); execve("./ricorsione", arg, env); exit(-1); } else{ printf("Terminazione\n"); exit(1); } } exit(0); } //////////////////////////////////////////////////////// dove vi ho aggiunto la stampa di alcune variabili per verificare il comportamento; il programma entra nell'if, entra nell' execve e poi termina. Sapreste darmi una spiegazione? perche a me il codice sembra abbastanza corretto... vi ringrazio ciao ciao |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:05.



















