Quais são os padrões stdin e stdout de um processo filho?

6

Gostaria de saber quais são os stdin e stdout padrão de um processo filho (se houver esses padrões). São stdin e stdout de um processo filho o mesmo que o processo pai? Isso é algo herdado do pai ou algo definido pelo pai? Ou o stdin e stdout do processo filho são plugados em stdin e stdout do processo pai?

No meu entendimento, pai e filho não são canalizados, mas são os primeiros clones, então eu acho que stdin e stdout da criança são exatamente os mesmos que os pais, mas não tenho certeza.

Por exemplo, em um terminal executando bash como um shell de login, se eu digitar sh ele criará um processo shell filho, que terá como stdin o teclado e stdout a tela do terminal, assim como o seu pai. Eu quero entender como o stdin e o stdout da criança foram definidos e o que eles são.

Eu quero saber se, por exemplo, neste caso, se o stdin e stdout do filho são como o pai, é porque o stdin do pai é enviado para o stdin filho, e o pai apenas "redireciona" a entrada para o filho ou se criança recebe sua entrada diretamente do teclado.

Neste mesmo caso, se pai e filho tiverem o mesmo stdin, isso significa que o pai processa os mesmos comandos que são digitados para o filho? Como é que vemos apenas o stdin / out do filho no terminal e não o dos pais?

    
por eloone 21.04.2016 / 14:55

2 respostas

5

Veja a man page de fork (2). Um processo filho herda os descritores de arquivos do pai, incluindo entrada padrão e saída padrão. Para um único comando, o shell simplesmente permite que o processo filho herde esses descritores e grave sua saída no terminal. Para um pipeline, ele bifurca cada processo, configura um canal entre a saída de um e a entrada do próximo e, em seguida, executa (exec (2)) o executável de cada filho.

    
por 21.04.2016 / 15:50
0

A resposta anterior está correta, mas gostaria de incentivá-lo a ir mais longe e aprender a usar strace. O strace é anexado a um processo e, em seguida, imprime cada chamada do sistema que o processo está realizando no seu terminal. Isso pode ser muito educativo e talvez um pouco esmagador. Cada chamada de sistema tem uma página de manual e você verá cada pequena ação que o programa está fazendo em detalhes minuciosos. É muito útil para depurar processos problemáticos.

    
por 21.04.2016 / 16:02