summaryrefslogtreecommitdiff
path: root/src/pkg/os/exec_plan9.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/os/exec_plan9.go')
-rw-r--r--src/pkg/os/exec_plan9.go131
1 files changed, 0 insertions, 131 deletions
diff --git a/src/pkg/os/exec_plan9.go b/src/pkg/os/exec_plan9.go
deleted file mode 100644
index 2590dd67d..000000000
--- a/src/pkg/os/exec_plan9.go
+++ /dev/null
@@ -1,131 +0,0 @@
-// 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"
- "syscall"
-)
-
-// StartProcess starts a new process with the program, arguments and attributes
-// specified by name, argv and attr.
-func StartProcess(name string, argv []string, attr *ProcAttr) (p *Process, err Error) {
- sysattr := &syscall.ProcAttr{
- Dir: attr.Dir,
- Env: attr.Env,
- Sys: attr.Sys,
- }
-
- // Create array of integer (system) fds.
- intfd := make([]int, len(attr.Files))
- for i, f := range attr.Files {
- if f == nil {
- intfd[i] = -1
- } else {
- intfd[i] = f.Fd()
- }
- }
-
- sysattr.Files = intfd
-
- pid, h, e := syscall.StartProcess(name, argv, sysattr)
- if iserror(e) {
- return nil, &PathError{"fork/exec", name, e}
- }
-
- return newProcess(pid, h), nil
-}
-
-// Kill causes the Process to exit immediately.
-func (p *Process) Kill() Error {
- f, e := OpenFile("/proc/"+itoa(p.Pid)+"/ctl", O_WRONLY, 0)
- if iserror(e) {
- return NewSyscallError("kill", e)
- }
- defer f.Close()
- _, e = f.Write([]byte("kill"))
- return e
-}
-
-// Exec replaces the current process with an execution of the
-// named binary, with arguments argv and environment envv.
-// If successful, Exec never returns. If it fails, it returns an Error.
-// ForkExec is almost always a better way to execute a program.
-func Exec(name string, argv []string, envv []string) Error {
- e := syscall.Exec(name, argv, envv)
- if iserror(e) {
- return &PathError{"exec", name, e}
- }
-
- return nil
-}
-
-// Waitmsg stores the information about an exited process as reported by Wait.
-type Waitmsg struct {
- syscall.Waitmsg
-}
-
-// Wait waits for the Process to exit or stop, and then returns a
-// Waitmsg describing its status and an Error, if any. The options
-// (WNOHANG etc.) affect the behavior of the Wait call.
-func (p *Process) Wait(options int) (w *Waitmsg, err Error) {
- var waitmsg syscall.Waitmsg
-
- if p.Pid == -1 {
- return nil, EINVAL
- }
-
- for true {
- err = syscall.Await(&waitmsg)
-
- if iserror(err) {
- return nil, NewSyscallError("wait", err)
- }
-
- if waitmsg.Pid == p.Pid {
- break
- }
- }
-
- return &Waitmsg{waitmsg}, nil
-}
-
-// Wait waits for process pid to exit or stop, and then returns a
-// Waitmsg describing its status and an Error, if any. The options
-// (WNOHANG etc.) affect the behavior of the Wait call.
-// Wait is equivalent to calling FindProcess and then Wait
-// and Release on the result.
-func Wait(pid int, options int) (w *Waitmsg, err Error) {
- p, e := FindProcess(pid)
- if e != nil {
- return nil, e
- }
- defer p.Release()
- return p.Wait(options)
-}
-
-// Release releases any resources associated with the Process.
-func (p *Process) Release() Error {
- // NOOP for Plan 9.
- p.Pid = -1
- // no need for a finalizer anymore
- runtime.SetFinalizer(p, nil)
- return nil
-}
-
-// FindProcess looks for a running process by its pid.
-// The Process it returns can be used to obtain information
-// about the underlying operating system process.
-func FindProcess(pid int) (p *Process, err Error) {
- // NOOP for Plan 9.
- return newProcess(pid, 0), nil
-}
-
-func (w *Waitmsg) String() string {
- if w == nil {
- return "<nil>"
- }
- return "exit status: " + w.Msg
-}