Logo Studenta

Ejercicio 3: a) int main() { int p = fork(); if (p != 0) for(;;); if (p == 0) execl("/bin/ls", "ls", "-l", NULL); printf("Mi pid es %d", ge...

Ejercicio 3: a) int main() {
int p = fork();
if (p != 0) for(;;);
if (p == 0) execl("/bin/ls", "ls", "-l", NULL);
printf("Mi pid es %d", getpid());
return 0;
}


Esta pregunta también está en el material:

Practica1-2014
3 pag.

Sistemas de Informação Universidad Nacional de CórdobaUniversidad Nacional de Córdoba

💡 1 Respuesta

User badge image

Ed IA de Studenta Verified user icon


El código del ejercicio 3a) crea un nuevo proceso hijo y luego el proceso padre se bloquea. El proceso hijo ejecuta el comando ls -l y luego imprime su PID.

El código se explica de la siguiente manera:

  • La función fork() crea un nuevo proceso hijo. El proceso hijo hereda todos los recursos del proceso padre, excepto el PID.
  • La expresión p != 0 se evalúa a true si el proceso es el padre y a false si el proceso es el hijo.
  • La sentencia for(;;) hace que el proceso padre se bloquee.
  • La expresión p == 0 se evalúa a true si el proceso es el hijo y a false si el proceso es el padre.
  • La función execl() ejecuta el comando ls -l en el proceso hijo.
  • La función getpid() devuelve el PID del proceso actual.

El resultado de ejecutar el código es que se crea un nuevo proceso hijo que ejecuta el comando ls -l. El proceso padre se bloquea y no hace nada más.

Aquí hay una explicación más detallada de cada línea de código:

int main() {

La función main() es la función principal de todo programa C.

int p = fork();

La función fork() crea un nuevo proceso hijo. El proceso hijo hereda todos los recursos del proceso padre, excepto el PID. El PID es un número único que identifica a cada proceso.

if (p != 0) for(;;);

La expresión p != 0 se evalúa a true si el proceso es el padre y a false si el proceso es el hijo. Si el proceso es el padre, la sentencia for(;;) hace que el proceso se bloquee. Esto significa que el proceso no hará nada más.

if (p == 0) execl("/bin/ls", "ls", "-l", NULL);

La expresión p == 0 se evalúa a true si el proceso es el hijo y a false si el proceso es el padre. Si el proceso es el hijo, la función execl() ejecuta el comando ls -l en el proceso hijo. El comando ls -l lista los archivos en el directorio actual.

printf("Mi pid es %d", getpid());

La función printf() imprime el PID del proceso actual.

return 0;

La función return 0 indica que el programa ha terminado con éxito.

0
Dislike0

✏️ Responder

FlechasNegritoItálicoSubrayadaTachadoCitaCódigoLista numeradaLista con viñetasSuscritoSobreDisminuir la sangríaAumentar la sangríaColor de fuenteColor de fondoAlineaciónLimpiarInsertar el linkImagenFórmula

Para escribir su respuesta aquí, Ingresar o Crear una cuenta

User badge image

Otros materiales