Sì. Innanzitutto, crea una pipe:mkfifo /tmp/fifo
.Usa gdb per collegarti al processo:gdb -p PID
Quindi chiudi stdin:call close (0)
; e aprilo di nuovo:call open ("/tmp/fifo", 0600)
Infine, scrivi (da un terminale diverso, poiché probabilmente gdb si bloccherà):
echo blah > /tmp/fifo
Quando il terminale originale non è più accessibile...
reptyr
potrebbe essere quello che vuoi, vedi https://serverfault.com/a/284795/187998
Citazione da lì:
Dai un'occhiata a reptyr, che fa esattamente questo. La pagina github contiene tutte le informazioni.
reptyr - Uno strumento per "riscrivere" i programmi.
reptyr è un'utilità per prendere un programma in esecuzione esistente e collegarlo a un nuovo terminale. Hai avviato un lungo processo su ssh, ma devi andartene e non vuoi interromperlo? Basta avviare una schermata, usereptyr per prenderlo, quindi terminare la sessione di ssh e tornare a casa.
UTILIZZO
reptyr PID
"reptyr PID" prenderà il processo con id PID e lo allegherà al tuo attuale terminale.
Dopo il collegamento, il processo prenderà l'input e scriverà l'output sul nuovo terminale, inclusi ^C e ^Z. (Sfortunatamente, se lo fai in background, dovrai comunque eseguire "bg" o "fg" nel vecchio terminale. impossibile da correggere in modo ragionevole senza applicare patch alla tua shell.)
Sono abbastanza sicuro che non puoi.
Controlla usando ps x
. Se un processo ha un ?
come controllo di tty , non puoi più inviargli input.
9942 ? S 0:00 tail -F /var/log/messages
9947 pts/1 S 0:00 tail -F /var/log/messages
In questo esempio, puoi inviare input a 9947
facendo qualcosa come echo "test" > /dev/pts/1
. L'altro processo (9942
) non è raggiungibile.
La prossima volta puoi usare screen o tmux per evitare questa situazione.