使用多个进程写入 FIFO

使用多个进程写入 FIFO

我需要用 mkfifo 创建一个命名管道。例如:

mkfifo mypipe

我将有一个从管道读取的 systemd 服务(一个简单的 shell 脚本),并且我将在同一管道上编写调用另一个脚本(例如write-to-pipe.sh)。

write-to-pipe.sh如果我在管道上同时有多个写入实例怎么办?我的意思是,许多用户可以执行write-to-pipe.sh.如果两个用户尝试同时在管道上写入,是否会造成麻烦(就像两个用户尝试在常规文件(而不是管道)上写入并且其中一个用户覆盖另一个用户时)?

我希望这不是重复的,但我找不到这个问题的答案......

谢谢

答案1

这是我运行的快速测试:

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

我从 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

答案2

sem使用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

相关内容