如何同步在不同 TMUX 窗格中启动的进程?

如何同步在不同 TMUX 窗格中启动的进程?

考虑一下:

tmux split-window -d program1
program2 # this program depends on some side effects produced by program1

在这种情况下,program2将在准备就绪之前启动program1program1当产生可以被 消耗的副作用时,将发送信号/输出program2

我的问题:如何编写一个 shell 脚本,等待program1准备就绪后再开始program2

观察:program2不消耗program1输出,因此这不能通过用管道连接进程来解决。

答案1

我找到了解决方案这里。最后,它不是 TMUX 解决方案(最初我认为 tmux 会有某种机制来同步其窗格中运行的进程)

答案是使用命名管道。由于program1在准备好时发送输出,所以我需要的是这样的:

mkfifo /tmp/pipe
tmux split-window -d "program1 > /tmp/pipe 2>&1"
signal=`cat /tmp/pipe`
program2 # This will only run after program1 has output something

答案2

使用类似的工具FLOM(免费锁管理器)应该允许您执行类似的操作:

tmux split-window -d "flom -- program1"
flom -- program2 # this program depends on some side effects produced by program1

如果“program1”在“program2”之前启动,则预期行为将是:

  1. flom 将创建一个逻辑资源并专门为“program1”锁定它
  2. flom 将在“program2”的同一逻辑资源上排队,并等待“program1”终止。

相关内容