병렬로 실행되는 두 프로세스를 처리하는 방법은 무엇입니까?

병렬로 실행되는 두 프로세스를 처리하는 방법은 무엇입니까?

PuTTY 연결에서 시작한다고 가정해 보겠습니다.

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

이는 mysqldumpPID 5800과 mysqlPID 5801이라는 두 가지 프로세스를 생성합니다. PuTTY를 닫고 나중에 다시 돌아갈 수 있도록 실행 중인 프로세스가 계속 실행되도록 할 수 있습니까?

reptyr여기에서 단일 프로세스를 처리하고 이를 로 다시 부모로 지정 하는 방법에 대한 몇 가지 답변을 찾았지만 screen, 내 관심사는 병렬로 실행되는 두 프로세스를 처리하는 방법입니다.

답변1

바쁜 세션을 계속 진행하세요.

또 다른 새로운 세션을 엽니다.

tmuxSSH 연결을 닫거나 끊어도 앱이 유지되도록 사용하세요 . 는 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. 또한 실행 중인 앱을 따라 이전 셸을 잡을 수도 있습니다. 이제 exittmux/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.

관련 정보