別のTMUXウィンドウで起動されたプロセスを同期する方法は?

別のTMUXウィンドウで起動されたプロセスを同期する方法は?

考えてみてください:

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

この場合、program2準備が整う前に始まりますprogram1program1消費される可能性のある副作用が発生すると、信号/出力が送信されますprogram2

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」が終了するのを待ちます。

関連情報