小编Fur*_*ury的帖子

ssh 客户端会干扰命名管道吗?

设置:我有一个 bash 系统,其中有一个从后台进程管道中生成的文件。在管道的第一阶段,有多个进程写入单个命名管道。在管道的下一阶段,有一个读取器进程,它读取命名管道并将数据传递给其他工作进程以对数据进行操作。(参见下面的示例脚本)。如果通过 https 与远程资源通信确定数据尚未准备好,这些工作人员可以将数据返回到 stage2 管道。

问题:该设置在不平凡的负载下工作得很好,直到我在管道第二阶段的工作进程内添加了 ssh 调用。一旦我这样做了,通过命名管道的大量数据就开始消失。即使我将负载显着减少到只有之前工作负载的 2%,也会发生这种情况。

我做了一些阅读,发现了一些关于 ssh 客户端销毁 fds 的模糊引用,所以我不确定这是否相关。

环境:我目前在 Ubuntu 20.04 上使用 bash 5.0.17。我还在 Ubuntu 22.04 系统上进行了测试,并看到了相同的行为。

简化的脚本

#!/bin/bash

function stage1_worker()
{
  # Do work including network calls via a 3rd party program which uses python
  flock --exclusive $QUEUE -c "print \"%s\n\" $DATA > $QUEUE"
}

function stage2_reader_v1()
{
  local QUEUE_DATA=""
  while true ;
  do
    # logic
    if read QUEUE_DATA ; then
      stage2_worker $QUEUE_DATA &
    fi
    # logic
  done < $QUEUE
} …
Run Code Online (Sandbox Code Playgroud)

bash ssh openssh

3
推荐指数
1
解决办法
327
查看次数

标签 统计

bash ×1

openssh ×1

ssh ×1