diff options
| author | Ken Rockot <ken@oz.gs> | 2011-06-27 19:07:49 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2011-06-27 19:07:49 -0400 |
| commit | 82a8afdf1411bbe5b08b09d1e94a8d1c4fb5635c (patch) | |
| tree | 562d3da67a8c36a0cdc795adb72f80d5a2b076e4 /src/pkg | |
| parent | abd50de296c129bbb4def693a6f1ebb66d6221f6 (diff) | |
| download | go-82a8afdf1411bbe5b08b09d1e94a8d1c4fb5635c.tar.xz | |
syscall: support for tty options in StartProcess
These are the relevant changes to exec_unix.go now that
mkerrors.sh outputs have been updated.
R=rsc
CC=golang-dev
https://golang.org/cl/4648064
Diffstat (limited to 'src/pkg')
| -rw-r--r-- | src/pkg/syscall/exec_unix.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/pkg/syscall/exec_unix.go b/src/pkg/syscall/exec_unix.go index 4b3cfe47fc..46f05efef8 100644 --- a/src/pkg/syscall/exec_unix.go +++ b/src/pkg/syscall/exec_unix.go @@ -146,6 +146,14 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr } } + // Set process group + if sys.Setpgid { + _, _, err1 = RawSyscall(SYS_SETPGID, 0, 0, 0) + if err1 != 0 { + goto childerror + } + } + // Chroot if chroot != nil { _, _, err1 = RawSyscall(SYS_CHROOT, uintptr(unsafe.Pointer(chroot)), 0, 0) @@ -241,6 +249,22 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr RawSyscall(SYS_CLOSE, uintptr(i), 0, 0) } + // Detach fd 0 from tty + if sys.Noctty { + _, _, err1 = RawSyscall(SYS_IOCTL, 0, uintptr(TIOCNOTTY), 0) + if err1 != 0 { + goto childerror + } + } + + // Make fd 0 the tty + if sys.Setctty { + _, _, err1 = RawSyscall(SYS_IOCTL, 0, uintptr(TIOCSCTTY), 0) + if err1 != 0 { + goto childerror + } + } + // Time to exec. _, _, err1 = RawSyscall(SYS_EXECVE, uintptr(unsafe.Pointer(argv0)), @@ -260,12 +284,16 @@ childerror: panic("unreached") } +// Credential holds user and group identities to be assumed +// by a child process started by StartProcess. type Credential struct { Uid uint32 // User ID. Gid uint32 // Group ID. Groups []uint32 // Supplementary group IDs. } +// ProcAttr holds attributes that will be applied to a new process started +// by StartProcess. type ProcAttr struct { Dir string // Current working directory. Env []string // Environment. @@ -278,6 +306,9 @@ type SysProcAttr struct { Credential *Credential // Credential. Ptrace bool // Enable tracing. Setsid bool // Create session. + Setpgid bool // Set process group ID to new pid (SYSV setpgrp) + Setctty bool // Set controlling terminal to fd 0 + Noctty bool // Detach fd 0 from controlling terminal } var zeroProcAttr ProcAttr |
