ref: 2f8d3d7f2e4e3592b0a2fce30a4ec218aafe9bce
dir: /lib/std/wait+posixy.myr/
use sys
use "die"
use "syswrap"
pkg std =
type waitstatus = union
`Wsuccess
`Wfailure
`Wsignalled
`Waiterror
;;
const wait : (pid : pid -> waitstatus)
;;
const wait = {pid
var st
:again
if sys.waitpid(pid castto(sys.pid), &st, 0) > 0
match sys.waitstatus(st)
/*
when a process stops, eg, if paused by a debugger,
wait() will return. This API is for waiting until
a process exits. Loop instead.
*/
| `sys.Waitstop sig: goto again
| `sys.Waitfail fail: -> `Waiterror
| `sys.Waitsig sig: -> `Wsignalled
| `sys.Waitexit status:
if status == 0
-> `Wsuccess
else
-> `Wfailure
;;
;;
;;
-> `Waiterror
}