mirror of
https://github.com/golang/go
synced 2024-11-23 00:40:08 -07:00
Pretty printer for os.Waitmsg
R=rsc APPROVED=rsc DELTA=49 (49 added, 0 deleted, 0 changed) OCL=31568 CL=31671
This commit is contained in:
parent
964b6cf352
commit
d0e29f2852
@ -98,6 +98,55 @@ func Wait(pid int, options int) (w *Waitmsg, err Error) {
|
|||||||
return w, nil;
|
return w, nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Convert i to decimal string.
|
||||||
|
func itod(i int) string {
|
||||||
|
if i == 0 {
|
||||||
|
return "0"
|
||||||
|
}
|
||||||
|
|
||||||
|
u := uint64(i);
|
||||||
|
if i < 0 {
|
||||||
|
u = -u;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assemble decimal in reverse order.
|
||||||
|
var b [32]byte;
|
||||||
|
bp := len(b);
|
||||||
|
for ; u > 0; u /= 10 {
|
||||||
|
bp--;
|
||||||
|
b[bp] = byte(u%10) + '0'
|
||||||
|
}
|
||||||
|
|
||||||
|
if i < 0 {
|
||||||
|
bp--;
|
||||||
|
b[bp] = '-'
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(b[bp:len(b)])
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w Waitmsg) String() string {
|
||||||
|
// TODO(austin) Use signal names when possible?
|
||||||
|
res := "";
|
||||||
|
switch {
|
||||||
|
case w.Exited():
|
||||||
|
res = "exit status " + itod(w.ExitStatus());
|
||||||
|
case w.Signaled():
|
||||||
|
res = "signal " + itod(w.Signal());
|
||||||
|
case w.Stopped():
|
||||||
|
res = "stop signal " + itod(w.StopSignal());
|
||||||
|
if w.StopSignal() == syscall.SIGTRAP && w.TrapCause() != 0 {
|
||||||
|
res += " (trap " + itod(w.TrapCause()) + ")";
|
||||||
|
}
|
||||||
|
case w.Continued():
|
||||||
|
res = "continued";
|
||||||
|
}
|
||||||
|
if w.CoreDump() {
|
||||||
|
res += " (core dumped)"
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
// Getpid returns the process id of the caller.
|
// Getpid returns the process id of the caller.
|
||||||
func Getpid() int {
|
func Getpid() int {
|
||||||
p, r2, e := syscall.Syscall(syscall.SYS_GETPID, 0, 0, 0);
|
p, r2, e := syscall.Syscall(syscall.SYS_GETPID, 0, 0, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user