1
0
mirror of https://github.com/golang/go synced 2024-11-22 21:10:03 -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:
Austin Clements 2009-07-15 09:58:42 -07:00
parent 964b6cf352
commit d0e29f2852

View File

@ -98,6 +98,55 @@ func Wait(pid int, options int) (w *Waitmsg, err Error) {
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.
func Getpid() int {
p, r2, e := syscall.Syscall(syscall.SYS_GETPID, 0, 0, 0);