como lidar com dois processos que rodam em paralelo?

como lidar com dois processos que rodam em paralelo?

Digamos que em uma conexão PuTTY eu comece

mysqldump --host host1 --databases db1 db2 db3 | mysql

que cria dois processos: mysqldumpcom PID 5800 e mysqlcom PID 5801. É possível deixar os processos em execução continuarem a execução quando eu quiser fechar o PuTTY e ainda poder voltar a eles mais tarde?

Encontrei algumas respostas por aqui que tratam de um único processo e como usá- reptyrlo para re-pai screen, mas minha preocupação é como lidar com meus dois processos que rodam em paralelo.

Responder1

Deixe sua sessão ocupada em execução.

Abra outra nova sessão.

Use tmuxpara que o aplicativo persista mesmo se você fechar ou perder sua conexão ssh. O tmuxé semelhante a screen, sem dúvida um pouco melhor.

sudo apt install tmux
tmux

Agora o passo crucial, roubar o terminal dos processos.

sudo apt install reptyr
ps uw    # find one of the PIDs to save, any will do
reptyr -T the_PID

eu notei umefeito colateraldo reptyr -Tmétodo. Você também captura seu shell antigo junto com os aplicativos em execução. Se você exitagora, retornará ao shell original do tmux/screen. Use exitnovamente e você estará de volta ao seu shell de login.

Responder2

como lidar com dois processos que rodam em paralelo?

Há muitas respostas possíveis, usando ou não ferramentas screen, tmuxou executando como tarefas em segundo plano, usando arquivos de log separados ...

Executando dois processos separadamente

Você poderia usarchamado fifo:

mkfifo $HOME/mysqlFifo

Em seguida, execute em dois separadosterminalconsole:

mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo

e na segunda janela:

mysql <$HOME/mysqlFifo

Então deixe correr...

Quero fechar o PuTTY e ainda poder voltar a eles mais tarde?

screentambém

Alguma preparação:

cat >$HOME/mysqlScreenRc <<eof
screen -t dump mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo
screen -t mysql mysql <$HOME/mysqlFifo
eof
mkfifo $HOME/mysqlFifo

então

screen -S mysql -c $HOME/mysqlScreenRc

ou

screen -dmS mysql -c $HOME/mysqlScreenRc

para deixá-lo rodar em segundo plano ...

Então para conectar e assistir:

screen -r mysql

Para garantir que a tela permaneça aberta após o término dos comandos, você pode usar reado comando:

cat >$HOME/mysqlScreenRc <<eof
screen -t dump sh -c 'mysqldump --host host1 --databases db1 db2 db3 >$HOME/mysqlFifo;read foo'
screen -t mysql sh -c 'mysql <$HOME/mysqlFifo;read foo'
eof

Mas você poderia simplesmente executar em segundo plano com logs separados:

nohup mysqldump --host host1 --databases db1 db2 db3 2>/somepath/mysqldump.err |
    mysql >/somepath/mysql.log 2>/somepath/mysql.err &

Então você pode fechar este console e observar os arquivos em /somepath...

informação relacionada