commit a0ceb35bbf9b3921e6268aef572cac2ef8046880 Author: Eric Date: Fri Sep 29 19:02:19 2023 +0200 Upload Ejercicio Fork 3 diff --git a/Fork b/Fork new file mode 100755 index 0000000..9e6cdfe Binary files /dev/null and b/Fork differ diff --git a/Fork.c b/Fork.c new file mode 100644 index 0000000..0c05f85 --- /dev/null +++ b/Fork.c @@ -0,0 +1,48 @@ +#include +#include +#include +#include +#include +void main(void) +{ + pid_t pid, id_actual, Hijo_pid, pid2, Hijo2_pid; + pid = fork(); // Soy el abuelo e intento crear a mi hijo + if (pid == -1) + { // Hubo error + printf("Hubo un problema de impotencia al crear el hijo"); + exit(-1); + } + // Si todo va bien y se crea el hijo tenemos que hacer + // que el programa ejecute un código con distinto para cada + if (pid == 0) + { + // Nos encontramos en el hijo + pid2 = fork(); // soy el hijo y creo al nieto + switch (pid2) + { + case -1: // error + printf("No se ha podido crear el proceso nieto en el hijo\n"); + exit(-1); + break; + case 0: // Estoy en el nieto + printf("\t\tSoy el proceso NIETO %d, Mi padre es = %d \n", getpid(), getppid()); + break; + default: // proceso padre + Hijo2_pid = wait(NULL); // espero a que termine nieto, que es mi hijo. + printf("\t\tSoy el proceso HIJO %d, Mi padre es = %d \n", + getpid(), getppid()); + printf("\tMi hijo: %d terminó.\n", Hijo2_pid); + } + } + else + { + // Nos encontramos en el abuelo + id_actual = wait(NULL); // Espero a que termine mi hijo, que a su vez espera que termine el nieto + printf("Yo soy el abuelo de las dos criaturas anteriores:\n"); + printf("Mi PID es %d, el de mi padre (Sistema Operativo) es %d.\n", getpid(), getppid()); + printf("Mi hijo si es de verdad hijo mio deberia tener el PID %d.\n", pid); + printf("A mi nieto no lo puedo conocer, solo reconozco a mi generación inmediata\n"); + printf("Para conocer a mi NIETO debería implementar algún sitema de comunicación entre procesos.\n"); + exit(0); + } +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..6192f82 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# 3ºEjercicio Fork +~~~ +Soy el proceso NIETO 72781, Mi padre es = 72780 + Soy el proceso HIJO 72780, Mi padre es = 72779 + Mi hijo: 72781 terminó. +Yo soy el abuelo de las dos criaturas anteriores: +Mi PID es 72779, el de mi padre (Sistema Operativo) es 72447. + Mi hijo si es de verdad hijo mio deberia tener el PID 72780. + A mi nieto no lo puedo conocer, solo reconozco a mi generación inmediata + Para conocer a mi NIETO debería implementar algún sitema de comunicación entre procesos. +~~~