O que acontece com o arquivo de descritor de tabela no processo principal, depois de chamar dup2 e execvp no processo filho?
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.
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.)