Procesos en C: Ejemplo de fork() y wait()

Os pongo aquí otro ejemplo de los que uso en las clases de C. El enunciado del ejercicio es el siguiente:

EJERCICIO 3:

Escribir un programa que cree un hijo. El hijo debe escribir “Soy el hijo” diez veces. El padre debe escribir “Soy el padre” diez veces.
El padre debe esperar a que termine el hijo y mostrar el mensaje “Mi proceso hijo ya ha terminado”.

Usar un switch. No usar semáforos.

PREGUNTAS EJERCICIO 3:

1) ¿Qué proceso terminará primero? ¿Por qué?

#include 
int main() {
	int pid;
	int i;
	int estado;
 
	pid = fork();
 
	switch(pid)
	{
		case -1: // Si pid es -1 quiere decir que ha habido un error
			perror("No se ha podido crear el proceso hijo\n");
			break;
		case 0: // Cuando pid es cero quiere decir que es el proceso hijo
			for(i=0; i<10; i++)
				printf("Soy el hijo\n");
			break;
		default: // Cuando es distinto de cero es el padre
			for(i=0; i<10; i++)
				printf("Soy el padre\n");
			// La función wait detiene el proceso padre y se queda esperando hasta
			// que termine el hijo
			wait(estado);
			printf("Mi proceso hijo ya ha terminado.\n");
			break;
	}
 
}

RESPUESTAS A LAS PREGUNTAS DEL EJERCICIO 3

1) El proceso hijo terminará siempre el primero. La razón es que hemos añadido la función wait() que obligará al padre a esperar al hijo siempre.

Curso de programación en C para principiantes

Ejercicios de C resueltos y comentados

4 thoughts on “Procesos en C: Ejemplo de fork() y wait()

  1. Si quieres poner en marcha más de un proceso hijo tendrás que poner más de un fork(), ya que cada fork() sólo arranca un único proceso. Podrías poner todo el switch dentro de un while, un for o similar.

  2. Una consulta porque se tiene que esperar al hijo, supuestamente el padre y el hijo se ejecutan a la vez y por eso se pone el wait, sino no entiendo

  3. El padre y el hijo no ejecutan necesariamente al mismo tiempo y quien finalice primero dependera de a que proceso le concede el permiso de ejecucion el sistema operativo. El padre debe esperar al hijo, ya que si el padre finaliza la ejecucion antes que el hijo, este ultimo quedara como un proceso huerfano.

Deja un comentario