O que acontece com o arquivo de descritor de tabela no processo principal, depois de chamar dup2 e execvp no processo filho?

StackOverflow https://stackoverflow.com//questions/25050117

  •  21-12-2019
  •  | 
  •  

Pergunta

Eu sou a codificação de um programa simples de shell, mas a certeza de que acontece com o arquivo de descritor de tabela após dup2() e execvp.Então, eu tenho um processo principal de espera para o processo filho para o final(waitpid), mas quando ele volta, para aguardar a próxima entrada do usuário, como faz o descritor de arquivo tabela I modificados usando dup2 no processo filho não persistem no processo pai?É porque execvp redefine o arquivo de descritor de tabela de volta para o original?

EDITAR:Eu descobri.A função de bifurcação, na verdade, faz uma cópia separada do programa de imagem, incluindo o arquivo de descritor de tabela para o processo pai do fd tabela não é afetada.

Foi útil?

Solução

Nada.O processo filho recebe uma cópia do pai descritores de arquivo quando ele é criado por fork(), mas as mudanças que ele faz depois que não são compartilhados de volta para o pai.

(Observe que, enquanto o descritor de arquivo tabela não é partilhado com o pai, o estado de descritores de arquivo em si é!Por exemplo, se você seek() em um descritor de arquivo que um processo filho herdou de seu pai, que afeta a cópia do pai também.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top