github.com/robhaswell/grandperspective-scan@v0.1.0/test/go-go1.7.1/src/os/exec.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package os 6 7 import ( 8 "runtime" 9 "sync" 10 "sync/atomic" 11 "syscall" 12 ) 13 14 // Process stores the information about a process created by StartProcess. 15 type Process struct { 16 Pid int 17 handle uintptr // handle is accessed atomically on Windows 18 isdone uint32 // process has been successfully waited on, non zero if true 19 sigMu sync.RWMutex // avoid race between wait and signal 20 } 21 22 func newProcess(pid int, handle uintptr) *Process { 23 p := &Process{Pid: pid, handle: handle} 24 runtime.SetFinalizer(p, (*Process).Release) 25 return p 26 } 27 28 func (p *Process) setDone() { 29 atomic.StoreUint32(&p.isdone, 1) 30 } 31 32 func (p *Process) done() bool { 33 return atomic.LoadUint32(&p.isdone) > 0 34 } 35 36 // ProcAttr holds the attributes that will be applied to a new process 37 // started by StartProcess. 38 type ProcAttr struct { 39 // If Dir is non-empty, the child changes into the directory before 40 // creating the process. 41 Dir string 42 // If Env is non-nil, it gives the environment variables for the 43 // new process in the form returned by Environ. 44 // If it is nil, the result of Environ will be used. 45 Env []string 46 // Files specifies the open files inherited by the new process. The 47 // first three entries correspond to standard input, standard output, and 48 // standard error. An implementation may support additional entries, 49 // depending on the underlying operating system. A nil entry corresponds 50 // to that file being closed when the process starts. 51 Files []*File 52 53 // Operating system-specific process creation attributes. 54 // Note that setting this field means that your program 55 // may not execute properly or even compile on some 56 // operating systems. 57 Sys *syscall.SysProcAttr 58 } 59 60 // A Signal represents an operating system signal. 61 // The usual underlying implementation is operating system-dependent: 62 // on Unix it is syscall.Signal. 63 type Signal interface { 64 String() string 65 Signal() // to distinguish from other Stringers 66 } 67 68 // Getpid returns the process id of the caller. 69 func Getpid() int { return syscall.Getpid() } 70 71 // Getppid returns the process id of the caller's parent. 72 func Getppid() int { return syscall.Getppid() }