Sí, lo es. Primero, crea una tubería:mkfifo /tmp/fifo
.Utilice gdb para adjuntar al proceso:gdb -p PID
Luego cierre stdin:call close (0)
; y ábrelo de nuevo:call open ("/tmp/fifo", 0600)
Finalmente, escribe (desde una terminal diferente, ya que gdb probablemente se cuelgue):
echo blah > /tmp/fifo
Cuando ya no se puede acceder al terminal original...
reptyr
podría ser lo que desea, consulte https://serverfault.com/a/284795/187998
Cita de allí:
Eche un vistazo a reptyr, que hace exactamente eso. La página de github tiene toda la información.
reptyr - Una herramienta para "repetir" programas.
reptyr es una utilidad para tomar un programa en ejecución existente y adjuntarlo a una nueva terminal. ¿Comenzó un proceso de ejecución continua a través de ssh, pero tiene que irse y no quiere interrumpirlo? Simplemente inicie una pantalla, use el nombre de usuario para tomarla y luego elimine la sesión y diríjase a casa.
USO
PID de reptyr
"reptyr PID" tomará el proceso con id PID y lo adjuntará a su terminal actual.
Después de adjuntar, el proceso tomará entradas y escribirá salidas en la nueva terminal, incluidos ^C y ^Z. (Desafortunadamente, si lo guarda en segundo plano, aún tendrá que ejecutar "bg" o "fg" en la terminal anterior. Esto es probable imposible de arreglar de manera razonable sin parchear su caparazón.)
Estoy bastante seguro de que no puedes.
Comprueba usando ps x
. Si un proceso tiene un ?
como controlando tty , ya no puede enviarle entradas.
9942 ? S 0:00 tail -F /var/log/messages
9947 pts/1 S 0:00 tail -F /var/log/messages
En este ejemplo, puede enviar la entrada a 9947
haciendo algo como echo "test" > /dev/pts/1
. El otro proceso (9942
) no es accesible.
La próxima vez, podría usar screen o tmux para evitar esta situación.