Por que alguns programas retornam ao shell imediatamente enquanto outros não o fazem até que a execução seja concluída?

13

Eu li no sistema operacional moderno que quando um comando é executado, o shell cria um filho processo, aguarda até que a criança tenha concluído a execução e, em seguida, aguarde outro comando do usuário. Este é realmente o caso de muitos programas como gedit . O terminal não aceita comandos até eu ter fechado 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 abriu não como um processo infantil? Qual é o mecanismo subjacente que torna isso possível?

Executando ps au | grep atom

<username>      8042  0.0  0.0  15944  2264 pts/1    S+   00:55   0:00 grep --color=auto atom
    
por Aswin P J 14.04.2016 / 09:29

1 resposta

18

A pergunta é sobre dois tipos de programas:

  1. programas que interagem com o usuário no shell e
  2. programas que não não interagem com o usuário no shell.

No primeiro caso, os programas que interagem com o usuário no shell são projetados para serem concluídos antes de retornar o controle ao shell. Nada de especial é feito.

O segundo caso é mais complicado. Tipicamente o programa irá garfo (fazendo uma cópia de si mesmo na memória), e arranjará para remover sua associação com o terminal de controle do shell , e poderá executar outro programa - que é executado independentemente do shell original. Você pode ver mensagens do segundo programa, mas geralmente não interage com você. Dependendo de como é usado, você pode ter

  • um processo daemon (servidor) ou
  • o programa pode ser executado em uma nova janela. Editores gráficos fazem o último.

Leitura adicional:

por 14.04.2016 / 10:22