Teniendo en cuenta el código de abajo:valor de retorno de llamada al sistema vfork()
int main()
{
int pid;
pid=vfork();
if(pid==0)
printf("child\n");
else
printf("parent\n");
return 0;
}
En caso de vfork() el espacio de direcciones utilizado por proceso padre y el proceso hijo es igual, copiar de manera única de la variable pid Debería estar ahí. Ahora no puedo entender cómo esta variable pid puede tener dos valores devueltos por vfork() es decir, cero para el niño y no cero para el padre?
En caso de tenedor() el espacio de direcciones también se copia y hay dos copias de la variable pid en cada niño y sus padres, así que puede entender en este caso dos copias diferentes pueden tener diferentes valores devueltos por tenedor() pero no puede entender en caso de vfork() cómo pid tienen dos valores devueltos por vfork()?
Eso es letal: puede ejecutar 'exec()' o '_exit()' en el archivo ['vfork()'] (http://pubs.opengroup.org/onlinepubs/009695399/toc.htm) 'd child , pero eso es todo. Casi todo lo demás conduce a un comportamiento indefinido. Recomendación: no use ['vfork()'] (http://pubs.opengroup.org/onlinepubs/007908799/xsh/vfork.html); de hecho, ni siquiera me molestaría en aprender a usarlo de manera segura. Es como 'gets()', una función que es mejor pretender que no existe. –
@JonathanLeffler: 'vfork()' es bastante útil para sistemas sin MMU. – ninjalj
Sí señor, estoy de acuerdo con usted no debería usarlo, pero estaba usando vfork para resolver un problema de creación de árbol de procesos y comunicación entre procesos de diferentes niveles de árbol, en ese caso vfork fue útil tomando una variable global. Mantendré tu consejo. –