Tengo entendido que fork
es la llamada al sistema la que crea un nuevo proceso clonando el proceso principal. ¿Por qué se crea el proceso padre? Si se utiliza una biblioteca C para crear múltiples procesos, ¿cuál fue la llamada al sistema para crear el primer proceso? Por ejemplo al correr./main.o
Respuesta1
El propio kernel contiene una llamada interna para execve()
crear el proceso 1 (init), que nunca sale.
Init() es la raíz de todo el árbol de procesos. Comienza bifurcando procesos para todos los servicios conocidos y otras tareas configuradas, y para todos los dispositivos de inicio de sesión.
Respuesta2
Cuando ejecuta su programa desde un shell, entonces el shell es su proceso principal.
El shell llama fork()
para crear un nuevo proceso hijo y luego, en ese nuevo proceso, llama a uno de la exec()
familia para comenzar a ejecutar su programa.
Si su programa se inicia mediante algún otro proceso (que no sea Shell), la secuencia es la misma.
Obviamente, esto tiene que comenzar en alguna parte: el ancestro último de todos los procesos es el init
proceso (PID 0), que el núcleo inicia mágicamente para iniciar el espacio de usuario.