La Primitiva fork(). Retorna un Cero al Proceso Hijo y el Pid del hijo al proceso padre. Creando una Copia de los Datos con los Valores que tengan al momento de lanzar el proceso hijo, a partir de ese momento las variables son independientes y si se modifican en un proceso, no afecta su valor en los otros.
Para comunicar los procesos se puede Utilizar pipes, memoria compartida SHM, archivos de disco y otros.
Esquema:
...
int Mi_Pipe[];
int Fid[3];
....
Fid[0] = getpid(); /* Pid del Padre */
pipe(Mi_Pipe);
/******************************
Se creo el Cauce de comunicación
Mi_Pipe[0] => Descriptor de Acceso an Lectura.
Mi_Pipe[1] => Decriptor de Acceso en Escritura.
*****************************/
....
if(!(Pid[1] = fork()))
{
/***
Codigo del Proceso Hijo 1.
***************/
return; /* Finalizar el Proceso */
}
/***
Proceso Padre Tiene en Pid[1]
El pid del Primer Porceso Hijo
***********************/
if(!(Pid[2] = fork()))
{
/***
Codigo del Proceso Hijo 2.
***************/
return; /* Finalizar el Proceso */
}
/***
Proceso Padre Tiene en Pid[2]
El pid del Primer Proceso Hijo
***********************/
/*******
Codigo del Padre
*************/
Para Sincronizar los Procesos se Pueden
Utilizar la Primitiva signal, kill
Espero te Sirva la Información