Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Commits on Jul 21, 2012
  1. Don't error out if stderr is redirected.

    If a process is run as $cmd 2>/dev/null, we can still find a terminal on fd's 0
    and 1, so don't spuriously error out.
Commits on Apr 15, 2011
  1. Fix detection of controlling tty on ARM.

    dev_t is *not* necessarily the same as 'unsigned int', and pretending it is
    breaks on ARM.
Commits on Apr 11, 2011
Commits on Mar 2, 2011
  1. Merge branch 'attach-fds'

Commits on Feb 23, 2011
  1. @pozdnychev

    fix: avoid memory leakage in case realloc() fails

    pozdnychev authored committed
    [ Change error handling slightly]
Commits on Feb 20, 2011
  1. Be smarter about choosing which fd's to attach.

    Instead of using readlink, stat() the child's file descriptors and
    compare the result to the device in /proc/$pid/stat and /dev/tty. This
    lets us properly attach a 'less' that is taking input from a pipe.
Commits on Feb 19, 2011
Commits on Feb 12, 2011
Commits on Jan 28, 2011
  1. Explicitly CONT the child on attach, and then STOP/CONT after attach.

    The explicit CONT on attach is needed in order for wait() to work on
    older kernels, and the STOP/CONT after attach is better at making bash
    notice the process is running again.
  2. Merge branch 'force-bg'

  3. Prefer mmap2() if present.

    i386 has an mmap(), but mmap2() is the one we want with the right
    calling convention.
Commits on Jan 27, 2011
Commits on Jan 25, 2011
  1. Send the child an explicit SIGCONT once we're done.

    This causes bash to notice that the process is backgrounded, which prevents it
    from sending a SIGTERM when the original shell exits.
  2. Copy the termios settings before we background the target process.

    If the target /doesn't/ properly initialize the terminal after a
    SIGTSTP/continue (I'm looking at you, emacs), we need to be sure to grab the
    terminal state before we suspend it and the shell resets the terminal to cooked
  3. Use wait4 instead of waitid().

    waitid() seems to return EINVAL sometimes, for reasons I don't understand.
  4. Try to stop the target with SIGTSTP before attaching.

    This should both cause the target process to redraw / reinitialize the
    terminal (since it thinks it's been backgrounded and restarted), and should give
    you back the old terminal, since it sees the process now running in the
Commits on Jan 22, 2011
  1. Fix compilation on amd64.

  2. Handle attaching to processes that are already session leaders.

    These are actually easier -- we just need to TIOCNOTTY, instead of
    playing games with a dummy child and setsid.
Commits on Jan 18, 2011
  1. Fix the rt_sigaction call.

    sizeof(sigset_t) is something ludicrous like 0x80 in userspace. Just hard-code
    it at 8, since all the userspace definitions seem to be lies.
  2. Don't allow the child to run unchecked between two syscalls.

    We were letting the child return from fork() and run to the next
    syscall. This happened to work on my system with 'less', but
    segfaulted on mutt. Instead, we need to reset the child to before the
    syscall point, so that none of its code is ever run.
  3. Checkpoint working version.

Something went wrong with that request. Please try again.