// ReAttachAndContinue re-attaches to a traced process with PTRACE_SEIZE.  The
// Ptrace API is a bit of a mess and requires a hack to get group stops to work
// properly with multithreaded programs. If the tracer re-attaches to the child
// with PTRACE_SEIZE then group stops will work properly.
ReAttachAndContinue re-attaches to a traced process with PTRACE_SEIZE.  The
Ptrace API is a bit of a mess and requires a hack to get group stops to work
properly with multithreaded programs. If the tracer re-attaches to the child
with PTRACE_SEIZE then group stops will work properly.
// ReAttachAndContinue re - attaches to a traced process with PTRACE_SEIZE . The // Ptrace API is a bit of a mess and requires a hack to get group stops to work // properly with multithreaded programs . If the tracer re - attaches to the child // with PTRACE_SEIZE then group stops will work properly .
func (t *Tracer) ReAttachAndContinue(options int) error {
	unix.Kill(t.pid, unix.SIGSTOP)
	unix.PtraceDetach(t.pid)
	_, _, err := unix.Syscall6(unix.SYS_PTRACE, unix.PTRACE_SEIZE, uintptr(t.pid), 0, uintptr(options), 0, 0)
	unix.Kill(t.pid, unix.SIGCONT)
	if err == 0 {
		return nil
	}
	return error(err)
}
func ( t * Tracer ) ReAttachAndContinue ( options int ) error { unix . Kill ( t . pid , unix . SIGSTOP ) unix . PtraceDetach ( t . pid ) _ , _ , err := unix . Syscall6 ( unix . SYS_PTRACE , unix . PTRACE_SEIZE , uintptr ( t . pid ) , 0 , uintptr ( options ) , 0 , 0 ) unix . Kill ( t . pid , unix . SIGCONT ) if err == 0 { return nil } return error ( err ) }
ReAttachAndContinue re-attaches to a traced process with PTRACE_SEIZE.
ReAttachAndContinue re - attaches to a traced process with PTRACE_SEIZE .