Ja, so ist es. Erstellen Sie zuerst eine Pipe:mkfifo /tmp/fifo
.Verwenden Sie gdb, um sich an den Prozess anzuhängen:gdb -p PID
Schließen Sie dann stdin:call close (0)
; und wieder öffnen:call open ("/tmp/fifo", 0600)
Schreiben Sie schließlich weg (von einem anderen Terminal, da gdb wahrscheinlich hängen bleibt):
echo blah > /tmp/fifo
Wenn das ursprüngliche Terminal nicht mehr zugänglich ist...
reptyr
könnte das sein, was Sie wollen, siehe https://serverfault.com/a/284795/187998
Zitat von dort:
Schauen Sie sich reptyr an, das genau das tut. Die Github-Seite enthält alle Informationen.
reptyr - Ein Werkzeug zum "Wiederholen" von Programmen.
reptyr ist ein Dienstprogramm, mit dem Sie ein vorhandenes laufendes Programm an ein neues Terminal anhängen können. Mitlaufenden Prozess über ssh gestartet, aber verlassen müssen und nicht unterbrechen wollen? Starten Sie einfach einen Bildschirm, usereptyr, um ihn abzurufen, beenden Sie dann die SSH-Sitzung und gehen Sie nach Hause.
VERWENDUNG
reptyr PID
"reptyr PID" greift den Prozess mit der ID PID und hängt ihn an Ihr aktuelles Terminal an.
Nach dem Anhängen nimmt der Prozess Eingaben vom neuen Terminal entgegen und schreibt Ausgaben in das neue Terminal, einschließlich ^C und ^Z. (Wenn Sie es im Hintergrund ausführen, müssen Sie leider immer noch "bg" oder "fg" im alten Terminal ausführen. Dies ist wahrscheinlich nicht auf vernünftige Weise zu beheben, ohne die Shell zu patchen.)
Ich bin mir ziemlich sicher, dass Sie das nicht können.
Prüfen Sie mit ps x
. Wenn ein Prozess einen ?
hat als kontrollierendes tty , Sie können keine Eingaben mehr daran senden.
9942 ? S 0:00 tail -F /var/log/messages
9947 pts/1 S 0:00 tail -F /var/log/messages
In diesem Beispiel können Sie Eingaben an 9947
senden etwas wie echo "test" > /dev/pts/1
tun . Der andere Prozess (9942
) ist nicht erreichbar.
Beim nächsten Mal könnten Sie screen oder tmux verwenden, um diese Situation zu vermeiden.