考虑一下:
tmux split-window -d program1
program2 # this program depends on some side effects produced by program1
在这种情况下,program2
将在准备就绪之前启动program1
。program1
当产生可以被 消耗的副作用时,将发送信号/输出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”之前启动,则预期行为将是:
- flom 将创建一个逻辑资源并专门为“program1”锁定它
- flom 将在“program2”的同一逻辑资源上排队,并等待“program1”终止。