1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // Copyright 2009 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package os
- import (
- "runtime"
- "sync/atomic"
- "syscall"
- )
- // Process stores the information about a process created by StartProcess.
- type Process struct {
- Pid int
- handle uintptr
- isdone uint32 // process has been successfully waited on, non zero if true
- }
- func newProcess(pid int, handle uintptr) *Process {
- p := &Process{Pid: pid, handle: handle}
- runtime.SetFinalizer(p, (*Process).Release)
- return p
- }
- func (p *Process) setDone() {
- atomic.StoreUint32(&p.isdone, 1)
- }
- func (p *Process) done() bool {
- return atomic.LoadUint32(&p.isdone) > 0
- }
- // ProcAttr holds the attributes that will be applied to a new process
- // started by StartProcess.
- type ProcAttr struct {
- // If Dir is non-empty, the child changes into the directory before
- // creating the process.
- Dir string
- // If Env is non-nil, it gives the environment variables for the
- // new process in the form returned by Environ.
- // If it is nil, the result of Environ will be used.
- Env []string
- // Files specifies the open files inherited by the new process. The
- // first three entries correspond to standard input, standard output, and
- // standard error. An implementation may support additional entries,
- // depending on the underlying operating system. A nil entry corresponds
- // to that file being closed when the process starts.
- Files []*File
- // Operating system-specific process creation attributes.
- // Note that setting this field means that your program
- // may not execute properly or even compile on some
- // operating systems.
- Sys *syscall.SysProcAttr
- }
- // A Signal represents an operating system signal.
- // The usual underlying implementation is operating system-dependent:
- // on Unix it is syscall.Signal.
- type Signal interface {
- String() string
- Signal() // to distinguish from other Stringers
- }
- // Getpid returns the process id of the caller.
- func Getpid() int { return syscall.Getpid() }
- // Getppid returns the process id of the caller's parent.
- func Getppid() int { return syscall.Getppid() }
|