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;
}
de salida:Llamada al sistema Unix fork() ¿qué se ejecuta cuando?
Init
pre fork()Parrent PID:4788
pre fork()Child PID:0
tengo un proceso en un sistema operativo Unix (Ubuntu en mi caso). No puedo por mi vida entender cómo funciona esto. Sé que la función fork()
divide mis programas en dos procesos, pero ¿desde dónde? ¿Crea un nuevo proceso y ejecuta de nuevo toda la función principal y, de ser así, por qué el init()
solo se ejecutó una vez y el printf()
dos veces?
¿Por qué el printf("pre fork()");
funciona dos veces y el init()
funciona solo una vez?
muchas gracias. realmente útil: D – boogie666
¡Guau, esto es tan sutil! +1 de mi parte –
Simplemente colocar una nueva línea no necesariamente limpia el búfer. Ejecute el código con stdout redirigido a un archivo normal y verá exactamente el mismo comportamiento. stdout es * no * línea almacenada de forma predeterminada a menos que sea un tty. –