Escrevendo em um FIFO com múltiplos processos

2

Eu preciso fazer um pipe nomeado com o mkfifo. Por exemplo:

mkfifo mypipe

Eu terei um serviço systemd (um script de shell simples) que leia o pipe e gravarei no mesmo pipe chamando outro script (por exemplo, write-to-pipe.sh ).

E se eu tiver várias instâncias de write-to-pipe.sh escrevendo simultaneamente no canal? Quero dizer, muitos usuários podem executar write-to-pipe.sh . Se dois usuários tentarem escrever no pipe ao mesmo tempo, isso vai criar problemas (como quando dois usuários tentam escrever em um arquivo regular (não pipe) e um sobrescreve o outro) ou não?

Espero que isso não seja uma duplicação, mas não consegui encontrar uma resposta para essa pergunta ...

Obrigado

    
por mugnozzo 30.06.2018 / 08:58

2 respostas

2

Aqui está um teste rápido que eu fiz:

mkfifo foo
yes "Process 1 reporting" > foo & yes "This is process 2" > foo &
awk '!a[$0]++' < foo

E a saída que recebi do awk:

Process 1 reporting
Process 1 reportThis is process 2
This is process 2
This is pring
Process 1 reportocess 2
ing
ocess 2
This is prProcess 1 reporting
    
por 30.06.2018 / 09:20
0

Use algo como sem do GNU Parallel:

mkfifo myfifo

sem --id myid 'seq 1 10; sleep 1; echo done' > myfifo &
sem --id myid 'seq 2 10; sleep 1; echo done' > myfifo &
sem --id myid 'seq 3 10; sleep 1; echo done' > myfifo &
sem --id myid 'seq 4 10; sleep 1; echo done' > myfifo &

cat myfifo
    
por 07.07.2018 / 20:02

Tags