Este código se puede simplificar mucho utilizando exit(int).
#include "unistd.h"
#include "sys/types.h"
int main()
{
int i, padre, prim_padre;
prim_padre = padre = 1;
for(i=0; i<3; i++) {
if (padre == 1) {
if (fork() == 0) {
// Proceso hijo
if (fork()==0) {
// Proceso nieto
printf("Nieto %i con padre %ld\n", getpid(), getppid());
} else {
printf("Hijo %i con padre %ld\n", getpid(), (long)getppid() );
}
padre = 0;
} else {
sleep(2);
if (prim_padre) {
printf("Padre %i\n", getpid());
prim_padre = 0;
}
}
}
}
return 0;
}
No comments:
Post a Comment