A leitura de STDIN pode conflitar com muitos escritos de diferentes processos? [fechadas]

0

Um dos meus aplicativos (digamos "A") envia alguns alertas para STDIN e o script do aplicativo lê o STDIN e o processa. Da mesma forma, pode haver outras aplicações (chamadas B, C, D) que podem empurrar suas saídas para o STDIN.

Eu quero saber que meu primeiro aplicativo pode ler os STDIN de outros aplicativos e que um conflito pode ocorrer nos dados? (quando eu leio STDIN de A, pode haver conteúdo de B, C STDIN?)

    
por Débora 21.02.2018 / 06:31

1 resposta

1

Não há "STDIN de A" útil neste cenário. O STDIN é sempre o da sua aplicação. a, b e c escrevem para seu STDOUT, os parênteses os colocam juntos e o pipe conecta o resultado ao STDIN de yourapp. Onde, sim, todos aqueles STDOUTs podem entrar em conflito (um após o outro, não entrelaçados).

( a ; b; c ) | yourapp

ou

( a && b && c ) | yourapp

Não está claro se você tem a, b e c dentro de um script de shell ("script de shell do aplicativo") e se é o mesmo script para todos. Se não for, os scripts são seus "aplicativos" e você está no cenário acima. Se for, você deve ter algo como

while ...; do
    read something
    a
    b
    c
done

No cenário acima, o "read" lerá o STDIN comum do aplicativo externo, novamente em ordem, possivelmente bloqueando se não houver nada para ler, mas não vejo como A pode empurrar qualquer coisa para lá.

Não posso ter certeza, mas suspeito que isso possa ser um caso em que canais nomeados ou corretores de mensagens podem ser úteis.

    
por 21.02.2018 / 07:50

Tags