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.
5 // +build darwin dragonfly freebsd linux netbsd openbsd
16 func (p
*Process
) wait() (ps
*ProcessState
, err error
) {
18 return nil, syscall
.EINVAL
20 var status syscall
.WaitStatus
21 var rusage syscall
.Rusage
22 pid1
, e
:= syscall
.Wait4(p
.Pid
, &status
, 0, &rusage
)
24 return nil, NewSyscallError("wait", e
)
37 func (p
*Process
) signal(sig Signal
) error
{
39 return errors
.New("os: process already finished")
41 s
, ok
:= sig
.(syscall
.Signal
)
43 return errors
.New("os: unsupported signal type")
45 if e
:= syscall
.Kill(p
.Pid
, s
); e
!= nil {
51 func (p
*Process
) release() error
{
54 // no need for a finalizer anymore
55 runtime
.SetFinalizer(p
, nil)
59 func findProcess(pid
int) (p
*Process
, err error
) {
61 return newProcess(pid
, 0), nil
64 func (p
*ProcessState
) userTime() time
.Duration
{
65 return time
.Duration(p
.rusage
.Utime
.Nano()) * time
.Nanosecond
68 func (p
*ProcessState
) systemTime() time
.Duration
{
69 return time
.Duration(p
.rusage
.Stime
.Nano()) * time
.Nanosecond