Comunicação entre processos

Pipes, FIFOs, dup2, sockets, sinais e memória partilhada, com ordem e fim de dados.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Escolher o canal

MecanismoTransportaCondição
Pipebytes, um sentidoEOF exige buffer vazio e todas as escritas fechadas
FIFObytes com nomeabertura bloqueante pode esperar pela outra ponta
Socketfluxo ou datagramasfluxo exige fronteiras (linhas, tamanho); meio-fecho com shutdown
Sinalnotificaçãotratador restrito; sinais padrão pendentes podem fundir-se
Memória partilhadamesmos bytessincronização entre processos
  • pipe(fd): lê em fd[0], escreve em fd[1]. Fecha as pontas não usadas em cada processo; cópia esquecida adia EOF.
  • Fluxos não preservam mensagens: leitura curta não é EOF; usa ciclos. Escritas até PIPE_BUF não se entrelaçam, mas podem chegar partidas.
  • Cria o canal antes de fork. Depois, cada pipe é um objeto distinto, mesmo com números iguais. O filho só lê EOF vazio se fechou a escrita do seu pipe e o buffer está esgotado; o pai só recebe SIGPIPE/EPIPE se fechou a leitura do outro pipe e tenta escrever sem leitores.
  • Pipeline: dup2(fd[1], STDOUT_FILENO) no produtor, dup2(fd[0], STDIN_FILENO) no consumidor; o supervisor fecha ambas e recolhe depois. Não esperes pelo produtor antes de lançar o consumidor com dados grandes.
  • Pedido/resposta em fluxo socket: shutdown(fd, SHUT_WR) termina o pedido sem fechar a leitura da resposta. close fecharia ambos os sentidos. Em pipes, o fim usa fecho da escrita, não shutdown.

Sinais

  • SIGKILL e SIGSTOP não se capturam. Usa nomes, não números.
  • No tratador, só funções async-signal-safe: assinala com volatile sig_atomic_t e trabalha no fluxo normal. printf e malloc no tratador não são seguros.
  • Sinais padrão repetidos enquanto pendentes podem fundir-se; não os uses como contador. Sinais de tempo real têm fila.
  • Contra a janela teste/dormir: bloqueia com sigprocmask, instala com sigaction, testa sob bloqueio e dorme com sigsuspend.

Memória partilhada

mmap falha com MAP_FAILED. MAP_SHARED partilha; MAP_PRIVATE isola com COW. munmap remove; fechar o descritor não remove. Pai que lê depois de waitpid está ordenado; filas vivas exigem sincronização de processos.

Pipe completo.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.