Proceso → Process ID (pid).

Syscalls Básicas

Fork

pid_t fork(void): Crea un nuevo proceso, que es un clon del primero. A partir de la llamada a fork, las ejecuciones son independientes. El orden lo determina el scheduler.

La memoria entre procesos no es compartida: se copia.

Si soy el padre, me devuelve el PID del hijo. Si soy el hijo, me devuelve 0. El hijo tiene un pid que se puede obtener con un getpid.

Obteniendo pid

Kill

En caso de matar un proceso, el proceso hijo queda huerfano. Para no romper el invariante de UNIX de que todos los procesos tienen un padre salvo el init, se reasigna un padre.

Clone

Cuando uno usa fork, se está llamando a la syscall clone.

Copia de Memoria

Los procesos por fork están en distintas direcciones físicas, pero comparten la misma dirección virtual. Para hacer una copia, el sistema operativo hace un copy on write.

Esto quiere decir que ambos compartirán las mismas direcciones físicas hasta que alguna de ellas cambia el contenido (o cuando lo quiere leer).