как работать с двумя процессами, которые выполняются параллельно?

как работать с двумя процессами, которые выполняются параллельно?

Допустим, в соединении PuTTY я начинаю

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

что создает два процесса: mysqldumpс PID 5800 и mysqlс PID 5801. Можно ли разрешить запущенным процессам продолжить выполнение, когда я захочу закрыть PuTTY, и при этом иметь возможность вернуться к ним позже?

Я нашел здесь несколько ответов, касающихся одного процесса и того, как использовать reptyrего для повторного назначения родительскому процессу screen, но меня беспокоит, как быть с двумя процессами, которые выполняются параллельно.

решение1

Оставьте свою напряженную сессию включенной.

Откройте еще одну свежую сессию.

Используйте tmux, чтобы приложение сохранялось, даже если вы закроете или потеряете соединение ssh. tmuxПохоже на screen, возможно, немного лучше.

sudo apt install tmux
tmux

Теперь решающий шаг — украсть терминал процессов.

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

Я заметил одинпобочный эффектметода reptyr -T. Вы также ловите свою старую оболочку вместе с запущенными приложениями. Если вы exitсейчас, вы возвращаетесь к оригинальной оболочке tmux/screen. Используйте exitснова, и вы вернетесь к своей оболочке входа.

решение2

как работать с двумя процессами, которые выполняются параллельно?

Существует множество возможных ответов: использовать или нет screen, tmuxили инструменты, или запускать в качестве фоновых задач, используя отдельные файлы журналов...

Выполнение двух процессов по отдельности

Вы могли бы использоватьпо имени фифо:

mkfifo $HOME/mysqlFifo

Затем бегите в двух отдельныхТерминалконсоль:

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

и во втором окне:

mysql <$HOME/mysqlFifo

А потом дайте ему поработать...

Хочу ли я закрыть PuTTY и иметь возможность вернуться к ним позже?

screenслишком

Некоторая подготовка:

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

затем

screen -S mysql -c $HOME/mysqlScreenRc

или

screen -dmS mysql -c $HOME/mysqlScreenRc

чтобы запустить его в фоновом режиме...

Затем, чтобы подключиться и посмотреть:

screen -r mysql

Чтобы гарантировать, что экран останется открытым после завершения команд, вы можете использовать readкоманду:

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

Но вы можете просто запустить его в фоновом режиме с отдельными журналами:

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

Итак, вы можете закрыть эту консоль, а затем посмотреть файлы в /somepath...

Связанный контент