Funciones Útiles
fork()
faq.utnso.com/fork
a.k.a: Como crear procesos Hijos
fork() – Que es un proceso?
Proceso
ejecutando
- Código (solo lectura)
- Datos (memoria dinámica)
- Stack (asignaciones estáticas)
Fork() – Introducción
Proceso Hijo (PID Y / PPID X)
Proceso en ejecución (PID x)
Proceso padre
(PID x)
fork()
¡Los dos procesos son iguales!
fork() – Valor de Retorno??
-1→ Error
0 → Hijo
>0 → Padre
fork() es una función y como tal, tiene un valor de retorno que puede (y va a sernos) muy útil.
fork() – Y entonces?
Los procesos son iguales, pero pueden hacer cosas totalmente distintas….
Capaz que es lo que puede servirles para el TP no?
int main() {
if ( fork() == 0 ) {
/* Lógica del proceso HIJO */
}
else {
/* Lógica del proceso PADRE*/
}
}
fork() – Consideraciones
�
fork() – Esperar Fin de los hijos
int main() {
int pid = fork();
…
waitpid(...);
return EXIT_SUCCESS;
}
Los procesos padre deben esperar el fin de los hijos para que no se conviertan en zombies...
fork() – Control de hijos vivos?
int main() {
…
kill(pid, 0);
...
}
Para controlar si un proceso hijo sigue vivo se le puede enviar una señal… y dale que va con las señales...
Valores de Retorno:
0 -> El proceso existe
-1 -> El proceso no existe
fork() – exec*() (La familia de exec())
Proceso en ejecución (PID x)
if (pid == 0) {
// hijo
execv(“/bin/ls”,NULL);
// nunca se ejecuta
exit(0);
}
else
{
// padre
wait (pid);
exit(0);
}
Cómo ejecutar un programa totalmente distinto