Meu entendimento é que fork
é a chamada do sistema que cria um novo processo clonando o processo pai. Pelo que cria o processo pai? Se estiver usando uma biblioteca C para criar vários processos, qual foi a chamada do sistema para criar o primeiro processo? Por exemplo ao executar./main.o
Responder1
O próprio Kernel contém uma chamada interna para execve()
criar o processo 1 (init), que nunca termina.
Init() é a raiz de toda a árvore de processos. Ele começa bifurcando processos para todos os serviços conhecidos e outras tarefas configuradas, e para todos os dispositivos de login.
Responder2
Quando você executa seu programa a partir de um shell, o shell é seu processo pai.
O shell chama fork()
para criar um novo processo filho e, nesse novo processo, chama um membro da exec()
família para começar a executar seu programa.
Se o seu programa for iniciado por algum outro processo (não shell), a sequência será a mesma.
Obviamente, isso tem que começar em algum lugar: o ancestral final de todos os processos é o init
processo (PID 0), que é iniciado magicamente pelo kernel para iniciar o espaço do usuário.