从命名管道中分离而不终止源程序

问题描述 投票:0回答:1

给出两个程序A和B。A产生输出。B消耗输入。在Linux上,您可以将其与A | B连接。

或者,如果我想拆分那些程序的执行,我可以使用命名管道:

mkfifo pipe
A > pipe &
B < pipe &

但是如果我终止B,A也会被杀死。

是否有一种方法可以将A连接到B,同时重新启动B多次?B在不运行时丢失数据(例如,在以下示例中被杀死期间)并不重要。以下是我的目标,但不起作用:

mkfifo pipe
A > pipe &
B > pipe &
kill B
B > pipe &

我为什么需要这个?

在我的情况下,A是Wireshark的JSON输出,我正在开发B以解析正确的数据。我想以交互方式进行操作,但是为此,我需要Wireshark(或tshark)才能继续发送数据。

我知道thisthat可能重复,但是我的问题不同。我没有忘记将A重定向到其他地方,我可以事先准备。

shell pipe ipc wireshark
1个回答
0
投票

A在B终止的那一刻收到SIGPIPE。解决方法是:

exec 3<>pipe
A >&3 &
B <&3 &

这样,当fifo被打开以供另一个进程读取时,当B死时,内核不会向A发送SIGPIPE;即B不是从中读取的最后一个过程。

© www.soinside.com 2019 - 2024. All rights reserved.