blob: a690feb3f08fe209edab672bf244d28289d78b7b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
use sys
use "die.use"
use "syswrap.use"
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
}
|