void child(int pid){
printf("Child PID:%d\n",pid);
exit(0);
}
void parent(int pid){
printf("Parent PID:%d\n",pid);
exit(0);
}
void init(){
printf("Init\n");//runs before the fork
}
int main(){
init();//only runs for parent i.e. runs once
printf("pre fork()");// but this runs for both i.e. runs twice
//why???
int pid = fork();
if(pid == 0){
child(pid); //run child process
}else{
parent(pid);//run parent process
}
return 0;
}
uscita:Il sistema Unix fork() chiama quando viene eseguito?
Init
pre fork()Parrent PID:4788
pre fork()Child PID:0
Ho un processo in un sistema operativo Unix (Ubuntu nel mio caso). Non posso per la vita di me capire come funziona. So che la funzione fork()
divide i miei programmi in due processi ma da dove? Crea un nuovo processo ed esegue di nuovo l'intera funzione principale, e in caso affermativo, perché il init()
viene eseguito solo una volta e lo printf()
due volte?
Perché il printf("pre fork()");
viene eseguito due volte e la funzione init()
una sola volta?
Thanks a lot. davvero utile: D – boogie666
Wow, questo è così sottile! +1 da me! –
Inserire semplicemente una nuova riga non necessariamente svuota il buffer. Esegui il codice con lo stdout reindirizzato a un file normale e vedrai esattamente lo stesso comportamento. stdout è * not * line buffered di default a meno che non sia un tty. –