Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | (* Modified from SML/NJ sources by Stephen Weeks 1998-06-25 *) |
2 | (* modified by Stephen Weeks 1999-12-10 *) | |
3 | (* modified by Stephen Weeks 2000-01-18 *) | |
4 | (* modified by Matthew Fluet 2008-03-02 *) | |
5 | (* modified by Matthew Fluet 2008-04-06 *) | |
6 | ||
7 | (* os-process.sml | |
8 | * | |
9 | * COPYRIGHT (c) 1995 AT&T Bell Laboratories. | |
10 | * | |
11 | * The Posix-based implementation of the generic process control | |
12 | * interface (OS.Process). | |
13 | * | |
14 | *) | |
15 | ||
16 | structure OS_Process: OS_PROCESS_EXTRA = | |
17 | struct | |
18 | open Posix.Process | |
19 | ||
20 | structure Status = | |
21 | struct | |
22 | open MLtonProcess.Status | |
23 | ||
24 | fun equals (s1, s2) = | |
25 | (toRep s1) = (toRep s2) | |
26 | ||
27 | val fromPosix = | |
28 | fn es => | |
29 | let | |
30 | datatype z = datatype Posix.Process.exit_status | |
31 | in | |
32 | case es of | |
33 | W_EXITED => success | |
34 | | W_EXITSTATUS w => | |
35 | fromRep (C_Status.castFromSysWord (Word8.castToSysWord w)) | |
36 | | W_SIGNALED _ => failure | |
37 | | W_STOPPED _ => failure | |
38 | end | |
39 | end | |
40 | ||
41 | type status = Status.t | |
42 | ||
43 | val failure = Status.failure | |
44 | val success = Status.success | |
45 | fun isSuccess st = Status.equals (st, success) | |
46 | ||
47 | fun system cmd = | |
48 | (Status.fromRep o Posix.Error.SysCall.simpleResult) | |
49 | (fn () => | |
50 | PrimitiveFFI.Posix.Process.system (NullString.nullTerm cmd)) | |
51 | ||
52 | val atExit = MLtonProcess.atExit | |
53 | ||
54 | val exit = MLtonProcess.exit | |
55 | ||
56 | fun terminate x = Posix.Process.exit (Word8.fromInt (Status.toInt x)) | |
57 | ||
58 | val getEnv = Posix.ProcEnv.getenv | |
59 | ||
60 | fun sleep t = | |
61 | if Time.<= (t, Time.zeroTime) | |
62 | then () | |
63 | else sleep (Posix.Process.sleep t) | |
64 | end |