Ano to je. Nejprve vytvořte kanál:mkfifo /tmp/fifo
.Pro připojení k procesu použijte gdb:gdb -p PID
Poté zavřete stdin:call close (0)
; a znovu jej otevřete:call open ("/tmp/fifo", 0600)
Nakonec odepište (z jiného terminálu, protože gdb pravděpodobně přestane reagovat):
echo blah > /tmp/fifo
Když původní terminál již není přístupný...
reptyr
může být to, co chcete, viz https://serverfault.com/a/284795/187998
Citace odtud:
Podívejte se na reptyr, který přesně to dělá. Stránka github obsahuje všechny informace.
reptyr – Nástroj pro „přepisování“ programů.
reptyr je nástroj pro převzetí existujícího běžícího programu a jeho připojení k novému terminálu. Začali jste s běžícím procesem přes ssh, ale musíte odejít a nechcete ho přerušovat? Stačí spustit obrazovku, usereptyr ji uchopit a pak zabít thessh session a jít domů.
POUŽITÍ
reptyr PID
"Reptyr PID" uchopí proces s ID PID a připojí jej k vašemu aktuálnímu terminálu.
Po připojení proces převezme vstup a zapíše výstup do nového terminálu, včetně ^C a ^Z. (Bohužel, pokud jej použijete na pozadí, stále budete muset spouštět "bg" nebo "fg" ve starém terminálu. To je pravděpodobné nemožné opravit v oblastech vhodným způsobem bez záplaty yourshell.)
Jsem si zcela jistý, že nemůžete.
Zkontrolujte pomocí ps x
. Pokud má proces ?
jako ovládající tty , již do něj nemůžete odesílat vstup.
9942 ? S 0:00 tail -F /var/log/messages
9947 pts/1 S 0:00 tail -F /var/log/messages
V tomto příkladu můžete odeslat vstup na 9947
udělat něco jako echo "test" > /dev/pts/1
. Druhý proces (9942
) není dosažitelný.
Příště můžete této situaci předejít pomocí screen nebo tmux.