Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Reparent a running program to a new terminal

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 arch
Octocat-spinner-32 .gitignore Import stub ptrace infrastructure. January 17, 2011
Octocat-spinner-32 COPYING Add a COPYING and README. January 21, 2011
Octocat-spinner-32 Makefile
Octocat-spinner-32 NOTES Check in my NOTES file. January 17, 2011
Octocat-spinner-32 README
Octocat-spinner-32 attach.c
Octocat-spinner-32 ptrace.c
Octocat-spinner-32 ptrace.h
Octocat-spinner-32 reptyr.c
Octocat-spinner-32 reptyr.h
README
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.

USAGE
-----

  reptyr PID

"reptyr PID" will grab the process with id PID and attach it to your
current terminal.

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 shell.

After attaching, you may need to send a ^L or similar to ncurses
applications to force them to redraw themselves. With "less", after
attaching, a ^Z will cause it to both redraw and to set up the
terminal application keys so that you can scroll with arrow keys
again.

"But wait, isn't this just screenify?"
--------------------------------------

There's a shell script called "screenify" that's been going around the
internet for nigh on 10 years now that uses gdb to (supposedly)
accomplish the same thing. The difference is that reptyr works much,
much, better.

If you attach a "less" using screenify, it will still take input from
the old terminal. If you attach an ncurses program using screenify,
and resize the window, your program won't notice. If you attach a
process with screenify, ^C in the new terminal won't work.

reptyr fixes all of these problems, and is the only such tool I know
of that does so. See below for some more details on how it
accomplishes this.


reptyr -l
---------

As a bonus feature, if you run "reptyr -l", reptyr will create a new
pseudo-terminal pair with nothing attached to the slave end, and print
its name out.

If you are debugging a program in gdb, you can pass that name to "set
inferior-pty". Because there is no existing program listening to that
tty, this will work much better than passing an existing shell's
terminal.

How does it work?
-----------------

The main thing that reptyr does that no one else does is that it
actually changes the controlling terminal of the process you are
attaching. I plan on writing up more about just how this works soon,
but for now, the source is only about 1000 lines if you're curious :)


CREDITS
-------
reptyr was written by Nelson Elhage <nelhage@nelhage.com>. Contact him
with any questions or bug reports.

URL
---
http://github.com/nelhage/reptyr
Something went wrong with that request. Please try again.