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 *)
9 * COPYRIGHT (c
) 1995 AT
&T Bell Laboratories
.
11 * The Posix
-based implementation
of the generic process control
12 * interface (OS
.Process
).
16 structure OS_Process
: OS_PROCESS_EXTRA
=
22 open MLtonProcess
.Status
25 (toRep s1
) = (toRep s2
)
30 datatype z
= datatype Posix
.Process
.exit_status
35 fromRep (C_Status
.castFromSysWord (Word8.castToSysWord w
))
36 | W_SIGNALED _
=> failure
37 | W_STOPPED _
=> failure
41 type status
= Status
.t
43 val failure
= Status
.failure
44 val success
= Status
.success
45 fun isSuccess st
= Status
.equals (st
, success
)
48 (Status
.fromRep
o Posix
.Error
.SysCall
.simpleResult
)
50 PrimitiveFFI
.Posix
.Process
.system (NullString
.nullTerm cmd
))
52 val atExit
= MLtonProcess
.atExit
54 val exit
= MLtonProcess
.exit
56 fun terminate x
= Posix
.Process
.exit (Word8.fromInt (Status
.toInt x
))
58 val getEnv
= Posix
.ProcEnv
.getenv
61 if Time
.<= (t
, Time
.zeroTime
)
63 else sleep (Posix
.Process
.sleep t
)