【问题标题】:socat - terminate on STDIN EOF while using fork optionsocat - 使用 fork 选项时在 STDIN EOF 上终止
【发布时间】:2016-08-19 02:05:01
【问题描述】:

我正在使用 socat 从端口上的标准输入发布数据。简而言之:

some_process | socat -u - tcp-listen:8888,reuseaddr,fork

我希望管道在 8888 端口上的读者来来去去时保持活跃,因此 fork 选项,但我也希望 socatsome_process 时终止 死了。目前它在这种情况下也保持活力。

一个简单的测试用例是:

while : ; do echo 1; sleep 1; done | socat -u - tcp-listen:8888,reuseaddr,fork

它给出了这个进程树(通过 pstree):

bash─┬─bash───sleep
     └─socat

如果我杀死第二个 bash(它正在运行 while 循环),那么我会得到:

bash───socat

我希望 socat 也终止。我想要的可能吗?

【问题讨论】:

    标签: socat


    【解决方案1】:

    要回答我自己的问题,我想要的似乎是不可能的。

    来自文档 (xio.help):

    选项:分叉

    没有fork(或fork=0),监听过程只接受一个 连接,然后终止。使用叉组,它会分叉 每个传入连接的新 socat 子进程。

    父进程保持在accept()和fork()调用的循环中,直到 从外部终止。

    我通过使用 FIFO 连接我的两个进程来解决这个问题:

    mkfifo /tmp/myfifo
    socat -u - tcp-listen:8888,reuseaddr,fork < /tmp/myfifo &
    socat_pid=$!
    some_process > /tmp/myfifo
    (some_process terminates for some reason)
    kill $socat_pid
    rm /tmp/myfifo
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-12
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      相关资源
      最近更新 更多