Tengo una duda sobre estos ejercicios en c

1. Observa el siguiente código y escribe la jerarquía de procesos resultante.

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
int num;
pid_t pid;
for(num= 0; num< 3; num++){
pid= fork();
printf ("Soy el proceso de PID %d y mi padre tiene %d de PID.\n",getpid(),getppid());
if(pid!= 0)
break;
srandom(getpid());
sleep(random()%3);
}
if(pid!= 0)
printf ("Fin del proceso de PID %d.\n", wait (NULL));
return 0;
}
Ahora compila y ejecuta el código para comprobarlo. Contesta a las siguientes preguntas:
• ¿Por qué aparecen mensajes repetidos?

Presta atención al orden de terminación de los procesos,
• ¿Qué observas?

• ¿Por qué?

2. Observa el siguiente código y escribe la jerarquía de procesos resultante.

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
int num;
pid_t pid;
srandom(getpid());
for (num= 0; num< 3; num++){pid= fork();
printf ("Soy el proceso de PID %d y mi padre tiene%d de PID.\n",
getpid(), getppid());
if(pid== 0)
break;
}if(pid== 0)
sleep(random()%5);
else
for (num= 0; num< 3; num++)
printf ("Fin del proceso de PID %d.\n", wait (NULL));
return 0;
}
Ahora compila y ejecuta el código para comprobarlo. Presta atención al orden de terminación de los procesos,
• ¿qué observas?

• ¿por qué?

3. Dibuja la estructura del árbol de procesos que obtendríamos al ejecutar el siguiente fragmento de código:

for(num= 0; num< 2; num++){
nuevo= fork(); /∗ 1 ∗/
if (nuevo== 0)
break;
}
nuevo= fork(); /∗ 2 ∗/
nuevo= fork(); /∗ 3 ∗/
printf("Soy el proceso %d y mi padre es%d\n", getpid(), getppid());

4. Considerando el siguiente fragmento de código:

for (num= 1; num< 3; num++){nuevo= fork();
if((num== 3) && (nuevo== 0))
execlp ("ls", "ls", "-l", NULL);
}

a) Dibuja la jerarquía de procesos generada cuando se ejecuta y n es 3.

b) Indica en qué procesos se ha cambiado la imagen del proceso usando la función execlp.

5. Dibuja la jerarquía de procesos que resulta de la ejecución del siguiente código. Indica para cada nuevo proceso el valor de las variables i y j en el momentode su creación.

for(i= 0; i< 2; i++){ pid= getpid();
for(j= 0; j< i+2; j++){ nuevo= fork(); /∗ 1 ∗/
if (nuevo!= 0) { nuevo= fork(); /∗ 2 ∗/
break;
}
}if(pid!= getpid())
break;
}

6. Estudia el siguiente código y escribe la jerarquía de procesos resultante. Después, compila y ejecuta el código para comprobarlo (deberás añadir llamadas al sistema getpid, getppid y wait para conseguirlo).

int main(int argc, char ∗argv[]){
int cont1, cont2;
pid t pid;
for (cont2= 0; cont2< L2; cont2++){for (cont1= 0; cont1< L1; cont1++) { pid= fork();
if (pid== 0)
break;
}if (pid!= 0)
break;
}return 0;
}

Añade tu respuesta

Haz clic para o