2009-02-15 20:35:52 -07:00
|
|
|
// 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 (
|
2011-02-03 20:41:26 -07:00
|
|
|
"runtime"
|
2012-08-20 18:41:31 -06:00
|
|
|
"sync/atomic"
|
2009-12-15 16:40:16 -07:00
|
|
|
"syscall"
|
2009-02-15 20:35:52 -07:00
|
|
|
)
|
|
|
|
|
2011-02-03 20:41:26 -07:00
|
|
|
// Process stores the information about a process created by StartProcess.
|
|
|
|
type Process struct {
|
|
|
|
Pid int
|
2015-05-10 07:35:52 -06:00
|
|
|
handle uintptr // handle is accessed atomically on Windows
|
|
|
|
isdone uint32 // process has been successfully waited on, non zero if true
|
2011-02-03 20:41:26 -07:00
|
|
|
}
|
|
|
|
|
2012-02-02 12:08:48 -07:00
|
|
|
func newProcess(pid int, handle uintptr) *Process {
|
2011-07-11 16:47:42 -06:00
|
|
|
p := &Process{Pid: pid, handle: handle}
|
2011-02-03 20:41:26 -07:00
|
|
|
runtime.SetFinalizer(p, (*Process).Release)
|
|
|
|
return p
|
|
|
|
}
|
|
|
|
|
2012-08-20 18:41:31 -06:00
|
|
|
func (p *Process) setDone() {
|
|
|
|
atomic.StoreUint32(&p.isdone, 1)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *Process) done() bool {
|
|
|
|
return atomic.LoadUint32(&p.isdone) > 0
|
|
|
|
}
|
|
|
|
|
2011-03-15 12:41:19 -06:00
|
|
|
// 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
|
2016-03-01 16:21:55 -07:00
|
|
|
// Files specifies the open files inherited by the new process. The
|
2011-03-15 12:41:19 -06:00
|
|
|
// first three entries correspond to standard input, standard output, and
|
2016-03-01 16:21:55 -07:00
|
|
|
// standard error. An implementation may support additional entries,
|
|
|
|
// depending on the underlying operating system. A nil entry corresponds
|
2011-03-15 12:41:19 -06:00
|
|
|
// to that file being closed when the process starts.
|
|
|
|
Files []*File
|
2011-06-14 08:49:34 -06:00
|
|
|
|
|
|
|
// 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
|
2011-03-15 12:41:19 -06:00
|
|
|
}
|
|
|
|
|
os/signal: selective signal handling
Restore package os/signal, with new API:
Notify replaces Incoming, allowing clients
to ask for certain signals only. Also, signals
go to everyone who asks, not just one client.
This could plausibly move into package os now
that there are no magic side effects as a result
of the import.
Update runtime for new API: move common Unix
signal handling code into signal_unix.c.
(It's so easy to do this now that we don't have
to edit Makefiles!)
Tested on darwin,linux 386,amd64.
Fixes #1266.
R=r, dsymonds, bradfitz, iant, borman
CC=golang-dev
https://golang.org/cl/3749041
2012-02-13 11:52:37 -07:00
|
|
|
// A Signal represents an operating system signal.
|
|
|
|
// The usual underlying implementation is operating system-dependent:
|
|
|
|
// on Unix it is syscall.Signal.
|
2011-07-13 17:29:37 -06:00
|
|
|
type Signal interface {
|
|
|
|
String() string
|
os/signal: selective signal handling
Restore package os/signal, with new API:
Notify replaces Incoming, allowing clients
to ask for certain signals only. Also, signals
go to everyone who asks, not just one client.
This could plausibly move into package os now
that there are no magic side effects as a result
of the import.
Update runtime for new API: move common Unix
signal handling code into signal_unix.c.
(It's so easy to do this now that we don't have
to edit Makefiles!)
Tested on darwin,linux 386,amd64.
Fixes #1266.
R=r, dsymonds, bradfitz, iant, borman
CC=golang-dev
https://golang.org/cl/3749041
2012-02-13 11:52:37 -07:00
|
|
|
Signal() // to distinguish from other Stringers
|
2011-07-13 17:29:37 -06:00
|
|
|
}
|
|
|
|
|
2009-05-25 15:38:38 -06:00
|
|
|
// Getpid returns the process id of the caller.
|
2009-12-15 16:40:16 -07:00
|
|
|
func Getpid() int { return syscall.Getpid() }
|
2009-05-25 15:38:38 -06:00
|
|
|
|
|
|
|
// Getppid returns the process id of the caller's parent.
|
2009-12-15 16:40:16 -07:00
|
|
|
func Getppid() int { return syscall.Getppid() }
|