Li no livro Sistemas operacionais modernos que, quando um comando é executado, o shell cria um processo filho, aguarda até que o filho termine a execução e aguarda outro comando do usuário. Este é realmente o caso de muitos programas como gedit
. O terminal não aceita comandos até eu fechar gedit
. No entanto, quando abro o editor de código atom , o shell retorna imediatamente, pronto para aceitar o próximo comando, mesmo com o editor em execução. Fechar o terminal não fecha o átomo. Isso significa que o editor não foi aberto como um processo filho? Qual é o mecanismo subjacente que torna isso possível?
Correr ps au | grep atom
dá
<username> 8042 0.0 0.0 15944 2264 pts/1 S+ 00:55 0:00 grep --color=auto atom
shell
process
background-process
Aswin PJ
fonte
fonte
ps au | grep atom
terminal e adicionar saída à sua pergunta?Respostas:
A pergunta pergunta sobre dois tipos de programas:
No primeiro caso, os programas que interagem com o usuário no shell são projetados para serem executados até a conclusão antes de retornar o controle ao shell. Nada de especial é feito.
O segundo caso é mais complicado. Normalmente, o programa bifurca-se (fazendo uma cópia de si mesmo na memória) e providencia para remover sua associação com o terminal de controle do shell e pode executar outro programa - que é executado independentemente do shell original. Você pode ver mensagens do segundo programa, mas normalmente não interage com você. Dependendo de como é usado, você pode ter
Leitura adicional:
fonte
daemon
função de biblioteca que faz tudo isso.