Beruflich Dokumente
Kultur Dokumente
Competencia transversal
Alumno: ________________________________________________
Matrícula: _________
Página - 0
ETSISI-U.P.M. Sistemas Operativos IC Curso 15/16
ÍNDICE
2 ESPECIFICACIÓN...........................................................................................................................................2
3 EJEMPLOS DE USO........................................................................................................................................2
4 BIBLIOGRAFÍA...............................................................................................................................................3
Página - 1
ETSISI-U.P.M. Sistemas Operativos IC Curso 15/16
2 ESPECIFICACIÓN
La sinopsis de este servicio es la siguiente:
#include <unistd.h>
Si todo va bien, se crea un proceso Hijo como réplica del Padre (proceso que llama a “fork”),
devolviéndose al Padre el identificador del proceso Hijo recién creado, mientras que al Hijo se
le devolverá siempre un cero. El Hijo podrá saber quién es utilizando la llamada “getpid” y
también podrá saber quién es su padre mediante la llamada “getppid”.
Si algo falla, por ejemplo no hay memoria suficiente para replicar al Padre, la función
devolverá -1 y en la variable “errno” se indicará el error concreto que se produjo.
3 EJEMPLOS DE USO
El primer ejemplo de uso consistirá en crear un proceso de tal forma que, una vez creado, el
Padre diga quién es él y quién es su Hijo, mientras que el Hijo informe de quién es él y quién
es su Padre.
En la página siguiente puede observarse el código concreto para este primer ejemplo
(Programa 1).
En el Programa 2 vemos cómo un Padre crea un proceso Hijo y el Padre escribe Aes mientras
el Hijo escribe Bes. Si este programa se ejecuta en una máquina con más de un núcleo, se
percibirá claramente la ejecución simultanea de ambos procesos.
En el Programa 3 podemos ver otro ejemplo que, supuesto que falle la creación de un proceso
(se acaba algún recurso: memoria, etc.), se informa de cuál ha sido el código de error.
Página - 2
ETSISI-U.P.M. Sistemas Operativos IC Curso 15/16
#include <stdio.h>
#include <unistd.h>
main (void) {
int pid;
pid = fork();
if (pid == 0)
printf (“[H] MiPadre = %5d Yo = %5d\n”, getppid(), getpid());
else
printf (“[P] Yo = %5d MiHijo = %5d\n”, getpid(), pid);
}
#include <stdio.h>
#include <unistd.h>
main (void) {
if (fork() == 0) imprimirLetras (‘B’);
else imprimirLetras (‘A’);
}
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
main (void) {
if (fork() == -1) printf (“Errno = %d\n”, errno);
}
4 BIBLIOGRAFÍA
1. PRÁCTICA 2. Llamadas al sistema. ETSISI-SisOpeIC. Septiembre 2015
2. Linux man page
Página - 3