Crear un proceso hijo mediante la función fork de Linux (en Bash y en PowerShell mediante WSL)
Código para crear un proceso hijo mediante la función fork
#include <stdio.h>
int main() {
int pid;
pid = fork();
// En cuanto llamamos a fork se crea un nuevo proceso. En el proceso
// padre pid contendrá el pid del proceso hijo. En el proceso hijo
// pid valdrá 0. Eso es lo que usamos para distinguir si el código
// que se está ejecutando pertenece al padre o al hijo.
if (pid) // Este es el proceso padre
{
printf("PADRE: Mi padre tiene el pid: %d\n", getppid());
printf("PADRE: Soy el proceso padre y mi pid es: %d\n", getpid());
printf("PADRE: Mi hijo tiene el pid: %d\n", pid);
}
else // Proceso hijo
{
printf("HIJO: Soy el proceso hijo y mi pid es: %d\n", getpid());
printf("HIJO: Mi padre tiene el pid: %d\n", getppid());
}
}
Código para PowerShell
$codigo = '
#include <stdio.h>
int main() {
int pid;
pid = fork();
// En cuanto llamamos a fork se crea un nuevo proceso. En el proceso
// padre pid contendrá el pid del proceso hijo. En el proceso hijo
// pid valdrá 0. Eso es lo que usamos para distinguir si el código
// que se está ejecutando pertenece al padre o al hijo.
if (pid) // Este es el proceso padre
{
printf("PADRE: Mi padre tiene el pid: %d\n", getppid());
printf("PADRE: Soy el proceso padre y mi pid es: %d\n", getpid());
printf("PADRE: Mi hijo tiene el pid: %d\n", pid);
}
else // Proceso hijo
{
printf("HIJO: Soy el proceso hijo y mi pid es: %d\n", getpid());
printf("HIJO: Mi padre tiene el pid: %d\n", getppid());
}
}
'
$codigo | Out-File fork.c
bash -c "iconv fork.c -f UTF-16 -t UTF-8 > forks.c"
wsl gcc forks.c
bash -c "./a.out"
Código ejecutado en PowerShell mediante WSL (el resultado es un poco extraño a la hora de obtener los identificadores de proceso tanto del proceso padre como del proceso hijo)
Código ejecutado en Bash (los identificadores de proceso del padre y del hijo son normales)