
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
별도의 로그 파일을 사용하여 백그라운드 작업으로 실행하는 등 가능한 답변이 많이 있습니다 .
두 프로세스를 별도로 실행
당신은 사용할 수 있습니다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
.