¿Cómo lidiar con dos procesos que se ejecutan en paralelo?

¿Cómo lidiar con dos procesos que se ejecutan en paralelo?

Digamos que en una conexión PuTTY empiezo

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

lo que crea dos procesos: mysqldumpcon PID 5800 y mysqlcon PID 5801. ¿Es posible dejar que los procesos en ejecución continúen ejecutándose cuando quiero cerrar PuTTY y aún poder volver a ellos más tarde?

Encontré algunas respuestas por aquí que tratan sobre un solo proceso y cómo usarlo reptyrpara volver a generarlo screen, pero mi preocupación es cómo lidiar con mis dos procesos que se ejecutan en paralelo.

Respuesta1

Deje en marcha su ocupada sesión.

Abra otra sesión nueva.

Úselo tmuxpara que la aplicación persista incluso si cierra o pierde su conexión ssh. Es tmuxsimilar a screen, posiblemente un poco mejor.

sudo apt install tmux
tmux

Ahora el paso crucial, robar la terminal de los procesos.

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

he notado unoefecto secundariodel reptyr -Tmétodo. También captura su antiguo shell junto con las aplicaciones en ejecución. Si lo hace exitahora, volverá al shell original de tmux/screen. Úselo exitnuevamente y volverá a su shell de inicio de sesión.

Respuesta2

¿Cómo lidiar con dos procesos que se ejecutan en paralelo?

Hay muchas respuestas posibles, usando o no herramientas screen, tmuxo ejecutando tareas en segundo plano, usando archivos de registro separados...

Ejecutar dos procesos por separado

Podrías usarllamado fifo:

mkfifo $HOME/mysqlFifo

Luego corre en dos separados.Terminalconsola:

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

y en la segunda ventana:

mysql <$HOME/mysqlFifo

Entonces déjalo correr...

¿Quiero cerrar PuTTY y aún poder volver a ellos más tarde?

screentambién

Alguna preparación:

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

entonces

screen -S mysql -c $HOME/mysqlScreenRc

o

screen -dmS mysql -c $HOME/mysqlScreenRc

para dejarlo ejecutar en segundo plano...

Luego para conectarse y mirar:

screen -r mysql

Para garantizar que la pantalla permanezca abierta después de finalizar los comandos, puede usar readel 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

Pero podrías ejecutarlo en segundo plano con registros separados:

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

Entonces podrías cerrar esta consola y luego mirar los archivos en /somepath...

información relacionada