Como posso sincronizar processos iniciados em diferentes painéis TMUX?

4

Considere isso:

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

Nesse caso, program2 será iniciado antes que program1 esteja pronto. program1 enviará sinais / saída quando produzir efeitos colaterais que podem ser consumidos por program2 .

Minha pergunta: Como posso escrever um script de shell que esperará até que program1 esteja pronto antes de iniciar o program2 ?

Observação: program2 não consome program1 output, então isso não é resolvido conectando os processos com um pipe.

    
por Thiago de Arruda 29.01.2013 / 20:04

2 respostas

2

Eu encontrei a solução aqui . No final, não foi solução TMUX (inicialmente eu tought tmux teria algum mecanismo para sincronizar os processos em execução em seus painéis)

A resposta está usando pipes nomeados. Como program1 envia a saída quando está pronta, tudo o que preciso é algo assim:

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
    
por 29.01.2013 / 23:10
0

Usar uma ferramenta como o FLOM (Free LOck Manager) deve permitir que você execute algo como:

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

se "program1" começar antes de "program2", o comportamento esperado será:

  1. flom criará um recurso lógico e o bloqueará exclusivamente para "program1"
  2. flom irá enfileirar no mesmo recurso lógico para "program2" e aguardar até a terminação "program1".
por 03.04.2014 / 23:08