1// Copyright 2012 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
5package os
6
7import "time"
8
9// FindProcess looks for a running process by its pid.
10//
11// The Process it returns can be used to obtain information
12// about the underlying operating system process.
13//
14// On Unix systems, FindProcess always succeeds and returns a Process
15// for the given pid, regardless of whether the process exists.
16func FindProcess(pid int) (*Process, error) {
17	return findProcess(pid)
18}
19
20// StartProcess starts a new process with the program, arguments and attributes
21// specified by name, argv and attr.
22//
23// StartProcess is a low-level interface. The os/exec package provides
24// higher-level interfaces.
25//
26// If there is an error, it will be of type *PathError.
27func StartProcess(name string, argv []string, attr *ProcAttr) (*Process, error) {
28	return startProcess(name, argv, attr)
29}
30
31// Release releases any resources associated with the Process p,
32// rendering it unusable in the future.
33// Release only needs to be called if Wait is not.
34func (p *Process) Release() error {
35	return p.release()
36}
37
38// Kill causes the Process to exit immediately.
39func (p *Process) Kill() error {
40	return p.kill()
41}
42
43// Wait waits for the Process to exit, and then returns a
44// ProcessState describing its status and an error, if any.
45// Wait releases any resources associated with the Process.
46// On most operating systems, the Process must be a child
47// of the current process or an error will be returned.
48func (p *Process) Wait() (*ProcessState, error) {
49	return p.wait()
50}
51
52// Signal sends a signal to the Process.
53// Sending Interrupt on Windows is not implemented.
54func (p *Process) Signal(sig Signal) error {
55	return p.signal(sig)
56}
57
58// UserTime returns the user CPU time of the exited process and its children.
59func (p *ProcessState) UserTime() time.Duration {
60	return p.userTime()
61}
62
63// SystemTime returns the system CPU time of the exited process and its children.
64func (p *ProcessState) SystemTime() time.Duration {
65	return p.systemTime()
66}
67
68// Exited reports whether the program has exited.
69func (p *ProcessState) Exited() bool {
70	return p.exited()
71}
72
73// Success reports whether the program exited successfully,
74// such as with exit status 0 on Unix.
75func (p *ProcessState) Success() bool {
76	return p.success()
77}
78
79// Sys returns system-dependent exit information about
80// the process.  Convert it to the appropriate underlying
81// type, such as syscall.WaitStatus on Unix, to access its contents.
82func (p *ProcessState) Sys() interface{} {
83	return p.sys()
84}
85
86// SysUsage returns system-dependent resource usage information about
87// the exited process.  Convert it to the appropriate underlying
88// type, such as *syscall.Rusage on Unix, to access its contents.
89// (On Unix, *syscall.Rusage matches struct rusage as defined in the
90// getrusage(2) manual page.)
91func (p *ProcessState) SysUsage() interface{} {
92	return p.sysUsage()
93}
94
95// Hostname returns the host name reported by the kernel.
96func Hostname() (name string, err error) {
97	return hostname()
98}
99
100// Readdir reads the contents of the directory associated with file and
101// returns a slice of up to n FileInfo values, as would be returned
102// by Lstat, in directory order. Subsequent calls on the same file will yield
103// further FileInfos.
104//
105// If n > 0, Readdir returns at most n FileInfo structures. In this case, if
106// Readdir returns an empty slice, it will return a non-nil error
107// explaining why. At the end of a directory, the error is io.EOF.
108//
109// If n <= 0, Readdir returns all the FileInfo from the directory in
110// a single slice. In this case, if Readdir succeeds (reads all
111// the way to the end of the directory), it returns the slice and a
112// nil error. If it encounters an error before the end of the
113// directory, Readdir returns the FileInfo read until that point
114// and a non-nil error.
115func (f *File) Readdir(n int) (fi []FileInfo, err error) {
116	if f == nil {
117		return nil, ErrInvalid
118	}
119	return f.readdir(n)
120}
121
122// Readdirnames reads and returns a slice of names from the directory f.
123//
124// If n > 0, Readdirnames returns at most n names. In this case, if
125// Readdirnames returns an empty slice, it will return a non-nil error
126// explaining why. At the end of a directory, the error is io.EOF.
127//
128// If n <= 0, Readdirnames returns all the names from the directory in
129// a single slice. In this case, if Readdirnames succeeds (reads all
130// the way to the end of the directory), it returns the slice and a
131// nil error. If it encounters an error before the end of the
132// directory, Readdirnames returns the names read until that point and
133// a non-nil error.
134func (f *File) Readdirnames(n int) (names []string, err error) {
135	if f == nil {
136		return nil, ErrInvalid
137	}
138	return f.readdirnames(n)
139}
140