Yes, it is. First, create a pipe:
Use gdb to attach to the process:
gdb -p PID
Then close stdin:
call close (0); and open it again:
call open ("/tmp/fifo", 0600)
Finally, write away (from a different terminal, as gdb will probably hang):
echo blah > /tmp/fifo
When original terminal is no longer accessible…
reptyr might be what you want, see https://serverfault.com/a/284795/187998
Quote from there:
Have a look at reptyr, which does exactly that. The github page has all the information.
reptyr – A tool for “re-ptying” programs.
reptyr is a utility for taking an
existing running program and attaching
it to a new terminal. Started a
long-running process over ssh, but
have to leave and don’t want to
interrupt it? Just start a screen, use
reptyr to grab it, and then kill the
ssh session and head on home.
“reptyr PID” will grab the process
with id PID and attach it to your
After attaching, the process will take
input from and write output to the new
terminal, including ^C and ^Z.
(Unfortunately, if you background it,
you will still have to run “bg” or
“fg” in the old terminal. This is
likely impossible to fix in a
reasonable way without patching your
Edit claims that “
reptyr cannot grab a process which has subprocesses. Or the subprocess (reptyr version 0.6.2).” Limited support does exist Issue, Issue
I am quite sure you can not.
ps x. If a process has a
? as controlling tty, you can not send input to it any more.
9942 ? S 0:00 tail -F /var/log/messages 9947 pts/1 S 0:00 tail -F /var/log/messages
In this example, you can send input to
9947 doing something like
echo "test" > /dev/pts/1. The other process (
9942) is not reachable.
Next time, you could use screen or tmux to avoid this situation.