From a6fc8d11a72f9d0aafc3f43349afdb7580923774 Mon Sep 17 00:00:00 2001 From: Derek Parker Date: Tue, 28 Jul 2015 12:20:07 -0500 Subject: [PATCH] Create new session/process grp for forked process --- proc/exec_darwin.c | 9 +++++++++ proc/proc_darwin.go | 2 +- proc/proc_linux.go | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/proc/exec_darwin.c b/proc/exec_darwin.c index 9466ff20..60ec37d1 100644 --- a/proc/exec_darwin.c +++ b/proc/exec_darwin.c @@ -34,6 +34,15 @@ fork_exec(char *argv0, char **argv, int size, read(fd[0], &sig, 1); close(fd[0]); + // Create a new session for this process. + if (setsid() < 0) { + // Could not set session, but still want to create + // a new process group. + if (setpgid(0, 0) < 0) { + return -1; + } + } + // Set errno to zero before a call to ptrace. // It is documented that ptrace can return -1 even // for successful calls. diff --git a/proc/proc_darwin.go b/proc/proc_darwin.go index b41c8e79..3f84dae9 100644 --- a/proc/proc_darwin.go +++ b/proc/proc_darwin.go @@ -98,7 +98,7 @@ func Attach(pid int) (*Process, error) { } func (dbp *Process) Kill() (err error) { - err = sys.Kill(dbp.Pid, sys.SIGKILL) + err = sys.Kill(-dbp.Pid, sys.SIGKILL) if err != nil { return errors.New("could not deliver signal: " + err.Error()) } diff --git a/proc/proc_linux.go b/proc/proc_linux.go index 268598b7..eac69e9f 100644 --- a/proc/proc_linux.go +++ b/proc/proc_linux.go @@ -43,7 +43,7 @@ func Launch(cmd []string) (*Process, error) { proc.Args = cmd proc.Stdout = os.Stdout proc.Stderr = os.Stderr - proc.SysProcAttr = &syscall.SysProcAttr{Ptrace: true} + proc.SysProcAttr = &syscall.SysProcAttr{Ptrace: true, Setsid: true} err = proc.Start() }) if err != nil {