Wie kann man feststellen, wann die SSH-Verbindung (über einen QProcess) beendet wurde?
Ich verwende einen SSH-Tunnel aus einer Anwendung mit einemQProcess
:
QProcess* process = new QProcess();
process->start("ssh", QStringList()<<"-L"<<"27017:localhost:27017"<<"example.com");
Bisher funktioniert es hervorragend, das einzige Problem ist, dass ich nicht sehen kann, wann der Port tatsächlich erstellt wurde.
Wenn ich den Befehl auf einer Shell ausführe, dauert es ungefähr 10 Sekunden, um eine Verbindung zum Remote-Host herzustellen. Danach ist der weitergeleitete Port zur Verwendung bereit. Wie erkenne ich es aus meiner Anwendung?
BEARBEITEN:
Wie von vahancho vorgeschlagen, habe ich die Tatsache verwendet, dass nach dem Herstellen der Verbindung auf dem Terminal einige Ausgaben vorhanden sind, mit denen festgestellt werden kann, dass die Verbindung erfolgreich war. Es gibt jedoch eine Linie, die sofort nach dem Start ausgeführt wirdPseudo-terminal will not be allocated because stdin is not a terminal
, was wahrscheinlich einen Fehlalarm auslösen würde. Der richtige Ausgang ist im zweiten Signal verfügbar, das etwas später ausgegeben wird (was ein wahrer Indikator dafür ist, dass der Port geöffnet wurde). Um die erste Nachricht loszuwerden, starte ich jetzt ssh mitssh -t -t
eine Standardzuweisung erzwingen.
Die einzige Frage, die noch offen ist, ist, kann mir jemand bei diesem Ansatz ohne Bedenken helfen?