Wie gehe ich mit zwei parallel laufenden Prozessen um?

Wie gehe ich mit zwei parallel laufenden Prozessen um?

Nehmen wir an, ich starte in einer PuTTY-Verbindung

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

Dadurch werden zwei Prozesse erstellt: mysqldumpmit PID 5800 und mysqlmit PID 5801. Ist es möglich, die laufenden Prozesse weiter auszuführen, wenn ich PuTTY schließen möchte, und trotzdem später auf sie zurückgreifen zu können?

Ich habe hier einige Antworten gefunden, die sich mit einem einzelnen Prozess und seiner Neuzuordnung befassen reptyr, screenaber meine Sorge ist, wie ich mit meinen beiden parallel laufenden Prozessen umgehen soll.

Antwort1

Lassen Sie Ihre aktive Sitzung laufen.

Öffnen Sie eine weitere neue Sitzung.

Verwenden Sie tmuxdies, damit die App bestehen bleibt, auch wenn Sie Ihre SSH-Verbindung schließen oder verlieren. Dies tmuxist ähnlich wie screenund möglicherweise etwas besser.

sudo apt install tmux
tmux

Nun der entscheidende Schritt: das Terminal der Prozesse stehlen.

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

Mir ist eins aufgefallenNebenwirkungder reptyr -TMethode. Sie fangen auch Ihre alte Shell zusammen mit den laufenden Apps. Wenn Sie exitjetzt, kehren Sie zur ursprünglichen Shell von tmux/screen zurück. Verwenden Sie es exiterneut und Sie sind wieder bei Ihrer Login-Shell.

Antwort2

Wie gehe ich mit zwei parallel laufenden Prozessen um?

Es gibt viele mögliche Antworten: Verwendung oder Nichtverwendung screen, tmuxTools, Ausführung als Hintergrundtasks, Verwendung separater Protokolldateien …

Zwei Prozesse getrennt ausführen

Du könntest benutzenmit dem Namen FIFO:

mkfifo $HOME/mysqlFifo

Dann laufen Sie in zwei getrenntenTerminalKonsole:

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

und im zweiten Fenster:

mysql <$HOME/mysqlFifo

Dann lass es laufen...

Ich möchte PuTTY schließen und später trotzdem darauf zurückkommen können?

screenzu

Einige Vorbereitungen:

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

Dann

screen -S mysql -c $HOME/mysqlScreenRc

oder

screen -dmS mysql -c $HOME/mysqlScreenRc

um es im Hintergrund laufen zu lassen ...

Dann verbinden und ansehen:

screen -r mysql

Um sicherzustellen, dass der Bildschirm nach Beendigung der Befehle geöffnet bleibt, können Sie readden folgenden Befehl verwenden:

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

Sie können es aber auch einfach im Hintergrund mit getrennten Protokollen ausführen:

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

Sie können also diese Konsole schließen und dann nach Dateien in /somepath... Ausschau halten.

verwandte Informationen