Ähnlich wie bei vielen früheren Fragen habe ich einen Job ausgeführt, von dem ich wünschte, ich hätte ihn auf dem Bildschirm ausgeführt. Ich musste den Prozess ablehnen, weil ich die Verbindung trennen musste. Nachdem ich mich wieder verbunden habe, sehe ich, dass der Prozess noch läuft. Wie kann ich den Prozess "zurückfordern", damit ich seine Ausgabe sehen und ihm Eingaben geben kann?
Diese Frage unterscheidet sich vom einfachen Verschieben eines laufenden Prozesses auf den Bildschirm darin, dass verlorene Standard- / Ausgangs- / Fehler-Handles erneut geöffnet werden.
Antworten:
Dies ist eine doppelte Frage - siehe Verschieben eines bereits laufenden Prozesses auf Screen , der auf retty verweist. Dies ist ein selbst beschriebener schrecklicher Hack, der das implementiert, was ich immer vermutet hatte, aber nie wirklich versucht hatte: Es findet fd 0, 1 , und 2 (Standard in, out bzw. Fehler) für den Prozess und haftet an ihnen, wie ein schrecklicher aberranter Parasit, der nicht sein sollte.
quelle
Indem Sie den Prozess ablehnen, möchten Sie effektiv, dass er die vom Terminal ausgegebenen SIGHUPs ignoriert. Sobald Sie Ihre Sitzung schließen (z. B. bash), wird dieser Prozess in den Besitz von init übergehen. Wenn Sie also sagen, dass Sie einen Prozess wieder besitzen möchten, nachdem Sie den Besitz aufgegeben haben, möchten Sie den Besitz von einem anderen Prozess übernehmen - der nicht implementiert ist, und das aus gutem Grund. Dies ist unter Linux einfach nicht möglich.
quelle
disown
bash-spezifischen Befehl zurückzuführen, der trotz des Namens eigentlich nichts mit dem Ändern der Prozessverantwortung zu tun hat.