Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | (* Copyright (C) 2009 Matthew Fluet. |
2 | * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh | |
3 | * Jagannathan, and Stephen Weeks. | |
4 | * | |
5 | * MLton is released under a BSD-style license. | |
6 | * See the file MLton-LICENSE for details. | |
7 | *) | |
8 | ||
9 | signature PROCESS = | |
10 | sig | |
11 | structure Command: | |
12 | sig | |
13 | type t = In.t * Out.t -> unit | |
14 | end | |
15 | ||
16 | structure Status: | |
17 | sig | |
18 | type t | |
19 | end | |
20 | ||
21 | (* Execute a program in a subprocess and wait for it to finish. | |
22 | * call (file, args) (i, o) searches PATH for an executable named file, | |
23 | * and runs it with arguments file :: args. | |
24 | *) | |
25 | val call: string * string list -> Command.t | |
26 | (* call' (c, a) = call (c, a) (In.standard, Out.standard) *) | |
27 | val call': string * string list -> unit | |
28 | val callWithIn: string * string list * (In.t -> 'a) -> 'a | |
29 | val callWithOut: string * string list * (Out.t -> 'a) -> 'a | |
30 | (* | |
31 | * Fork off a command and collect its output into a string. | |
32 | *) | |
33 | val collect: Command.t -> string | |
34 | val commandName: unit -> string | |
35 | val doesSucceed: (unit -> unit) -> bool | |
36 | val doubleFork: (unit -> unit) -> unit | |
37 | val exec: string * string list -> unit | |
38 | (* Raise Fail exception. *) | |
39 | val fail: string -> 'a | |
40 | (* Start a command in a subprocess, in the background. *) | |
41 | val fork: (unit -> unit) -> Pid.t | |
42 | val forkIn: (Out.t -> unit) -> Pid.t * In.t | |
43 | val forkOut: (In.t -> unit) -> Pid.t * Out.t | |
44 | val forkInOut: (In.t * Out.t -> unit) -> Pid.t * In.t * Out.t | |
45 | val getEnv: string -> string option | |
46 | (* | |
47 | * glob s returns the list of paths matching s. | |
48 | * For now, s should be a bash pattern. | |
49 | *) | |
50 | val glob: string -> string list | |
51 | val hostName: unit -> string | |
52 | val makeCommandLine: (string list -> unit) -> (string list -> Status.t) | |
53 | val makeMain: (string list -> unit) -> (unit -> unit) | |
54 | (* pipe [c_1, ..., c_n] runs the commands c_1, ..., c_n in | |
55 | * subprocesses in parallel, with the standard output of c_i hooked | |
56 | * to the standard input of c_i+1. | |
57 | * Fails if any of the commands fail. | |
58 | *) | |
59 | val pipe: Command.t list * In.t * Out.t -> unit | |
60 | (* pipe' cs = pipe (cs, In.standard, Out.standard) *) | |
61 | val pipe': Command.t list -> unit | |
62 | (* run = wait o fork *) | |
63 | val run: (unit -> unit) -> unit | |
64 | val setEnv: {name: string, value: string} -> unit | |
65 | val signal: Pid.t * Signal.t -> unit | |
66 | val signalGroup: Pid.t * Signal.t -> unit | |
67 | val size: File.t -> {text: int, data: int, bss: int} | |
68 | val sleep: Time.t -> Time.t | |
69 | val spawn: {path: string, args: string list} -> Pid.t | |
70 | val spawne: {path: string, args: string list, env: string list} -> Pid.t | |
71 | val spawnp: {file: string, args: string list} -> Pid.t | |
72 | val su: string -> unit (* string is userid *) | |
73 | val succeed: unit -> 'a | |
74 | val system: string -> unit | |
75 | val time: (unit -> unit) -> {system: Time.t, user: Time.t} | |
76 | (* try (f, m) tries f with exponentially backed off times, stopping after | |
77 | * a minute of trying, in which case is fails with m. | |
78 | *) | |
79 | val try: (unit -> 'a) * string -> 'a | |
80 | val usage: {usage: string, msg: string} -> 'a | |
81 | val userName: unit -> string | |
82 | (* Wait for process to finish. | |
83 | * Raise Fail if process terminates with nonzero status. | |
84 | *) | |
85 | val wait: Pid.t -> unit | |
86 | (* Wait for all Pid.ts in list to finish. *) | |
87 | val waits: Pid.t list -> unit | |
88 | (* watch f will rerun f until it succeeds *) | |
89 | val watch: (unit -> unit) -> unit | |
90 | ||
91 | structure State: | |
92 | sig | |
93 | datatype t = DiskSleep | Running | Sleeping | Traced | Zombie | |
94 | ||
95 | val toString: t -> string | |
96 | end | |
97 | ||
98 | val ps: unit -> {name: string, | |
99 | pgrp: Pid.t, | |
100 | pid: Pid.t, | |
101 | ppid: Pid.t, | |
102 | state: State.t} list | |
103 | ||
104 | end | |
105 | ||
106 | functor TestProcess (S: PROCESS): sig end = | |
107 | struct | |
108 | ||
109 | val _ = print "TestProcess\n" | |
110 | ||
111 | open S | |
112 | ||
113 | val _ = ps () | |
114 | ||
115 | end |