Назад | Перейти на главную страницу

изменение родителя для просмотра двух процессов, соединенных конвейером

Скажем, в соединении PuTTY я запускаю

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

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

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

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

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

Отдельный запуск двух процессов

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

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...

Оставьте занятый сеанс включенным.

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

Использовать 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 снова, и вы вернетесь в свою оболочку входа.