1init(3) Erlang Module Definition init(3)
2
3
4
6 init - Coordination of system startup.
7
9 This module is preloaded and contains the code for the init system
10 process that coordinates the startup of the system. The first function
11 evaluated at startup is boot(BootArgs), where BootArgs is a list of
12 command-line arguments supplied to the Erlang runtime system from the
13 local operating system; see erl(1).
14
15 init reads the boot script, which contains instructions on how to ini‐
16 tiate the system. For more information about boot scripts, see
17 script(4).
18
19 init also contains functions to restart, reboot, and stop the system.
20
22 mode() = embedded | interactive
23
24 Code loading mode.
25
27 boot(BootArgs) -> no_return()
28
29 Types:
30
31 BootArgs = [binary()]
32
33 Starts the Erlang runtime system. This function is called when
34 the emulator is started and coordinates system startup.
35
36 BootArgs are all command-line arguments except the emulator
37 flags, that is, flags and plain arguments; see erl(1).
38
39 init interprets some of the flags, see section Command-Line
40 Flags below. The remaining flags ("user flags") and plain argu‐
41 ments are passed to the init loop and can be retrieved by call‐
42 ing get_arguments/0 and get_plain_arguments/0, respectively.
43
44 get_argument(Flag) -> {ok, Arg} | error
45
46 Types:
47
48 Flag = atom()
49 Arg = [Values :: [string()]]
50
51 Returns all values associated with the command-line user flag
52 Flag. If Flag is provided several times, each Values is returned
53 in preserved order. Example:
54
55 % erl -a b c -a d
56 1> init:get_argument(a).
57 {ok,[["b","c"],["d"]]}
58
59 The following flags are defined automatically and can be
60 retrieved using this function:
61
62 root:
63 The installation directory of Erlang/OTP, $ROOT:
64
65 2> init:get_argument(root).
66 {ok,[["/usr/local/otp/releases/otp_beam_solaris8_r10b_patched"]]}
67
68 progname:
69 The name of the program which started Erlang:
70
71 3> init:get_argument(progname).
72 {ok,[["erl"]]}
73
74 home:
75 The home directory (on Unix, the value of $HOME):
76
77 4> init:get_argument(home).
78 {ok,[["/home/harry"]]}
79
80 Returns error if no value is associated with Flag.
81
82 get_arguments() -> Flags
83
84 Types:
85
86 Flags = [{Flag :: atom(), Values :: [string()]}]
87
88 Returns all command-line flags and the system-defined flags, see
89 get_argument/1.
90
91 get_plain_arguments() -> [Arg]
92
93 Types:
94
95 Arg = string()
96
97 Returns any plain command-line arguments as a list of strings
98 (possibly empty).
99
100 get_status() -> {InternalStatus, ProvidedStatus}
101
102 Types:
103
104 InternalStatus = internal_status()
105 ProvidedStatus = term()
106 internal_status() = starting | started | stopping
107
108 The current status of the init process can be inspected. During
109 system startup (initialization), InternalStatus is starting, and
110 ProvidedStatus indicates how far the boot script has been inter‐
111 preted. Each {progress, Info} term interpreted in the boot
112 script affects ProvidedStatus, that is, ProvidedStatus gets the
113 value of Info.
114
115 reboot() -> ok
116
117 All applications are taken down smoothly, all code is unloaded,
118 and all ports are closed before the system terminates. If com‐
119 mand-line flag -heart was specified, the heart program tries to
120 reboot the system. For more information, see heart(3).
121
122 To limit the shutdown time, the time init is allowed to spend
123 taking down applications, command-line flag -shutdown_time is to
124 be used.
125
126 restart() -> ok
127
128 The same as restart([]).
129
130 restart(Opts :: [{mode, mode()}]) -> ok
131
132 The system is restarted inside the running Erlang node, which
133 means that the emulator is not restarted. All applications are
134 taken down smoothly, all code is unloaded, and all ports are
135 closed before the system is booted again in the same way as ini‐
136 tially started.
137
138 The same BootArgs are used when restarting the system unless the
139 mode option is given, allowing the code loading mode to be set
140 to either embedded or interactive. All other BootArgs remain the
141 same.
142
143 To limit the shutdown time, the time init is allowed to spend
144 taking down applications, command-line flag -shutdown_time is to
145 be used.
146
147 script_id() -> Id
148
149 Types:
150
151 Id = term()
152
153 Gets the identity of the boot script used to boot the system. Id
154 can be any Erlang term. In the delivered boot scripts, Id is
155 {Name, Vsn}. Name and Vsn are strings.
156
157 stop() -> ok
158
159 The same as stop(0).
160
161 stop(Status) -> ok
162
163 Types:
164
165 Status = integer() >= 0 | string()
166
167 All applications are taken down smoothly, all code is unloaded,
168 and all ports are closed before the system terminates by calling
169 halt(Status). If command-line flag -heart was specified, the
170 heart program is terminated before the Erlang node terminates.
171 For more information, see heart(3).
172
173 To limit the shutdown time, the time init is allowed to spend
174 taking down applications, command-line flag -shutdown_time is to
175 be used.
176
178 Warning:
179 The support for loading of code from archive files is experimental. The
180 only purpose of releasing it before it is ready is to obtain early
181 feedback. The file format, semantics, interfaces, and so on, can be
182 changed in a future release. The -code_path_choice flag is also experi‐
183 mental.
184
185
186 The init module interprets the following command-line flags:
187
188 --:
189 Everything following -- up to the next flag is considered plain
190 arguments and can be retrieved using get_plain_arguments/0.
191
192 -code_path_choice Choice:
193 Can be set to strict or relaxed. It controls how each directory in
194 the code path is to be interpreted:
195
196 * Strictly as it appears in the boot script, or
197
198 * init is to be more relaxed and try to find a suitable directory
199 if it can choose from a regular ebin directory and an ebin direc‐
200 tory in an archive file.
201
202 This flag is particular useful when you want to elaborate with code
203 loading from archives without editing the boot script. For more
204 information about interpretation of boot scripts, see script(4).
205 The flag has also a similar effect on how the code server works;
206 see code(3).
207
208 -epmd_module Module:
209 Specifies the module to use for registration and lookup of node
210 names. Defaults to erl_epmd.
211
212 -eval Expr:
213 Scans, parses, and evaluates an arbitrary expression Expr during
214 system initialization. If any of these steps fail (syntax error,
215 parse error, or exception during evaluation), Erlang stops with an
216 error message. In the following example Erlang is used as a hexa‐
217 decimal calculator:
218
219 % erl -noshell -eval 'R = 16#1F+16#A0, io:format("~.16B~n", [R])' \\
220 -s erlang halt
221 BF
222
223 If multiple -eval expressions are specified, they are evaluated
224 sequentially in the order specified. -eval expressions are evalu‐
225 ated sequentially with -s and -run function calls (this also in the
226 order specified). As with -s and -run, an evaluation that does not
227 terminate blocks the system initialization process.
228
229 -extra:
230 Everything following -extra is considered plain arguments and can
231 be retrieved using get_plain_arguments/0.
232
233 -run Mod [Func [Arg1, Arg2, ...]]:
234 Evaluates the specified function call during system initialization.
235 Func defaults to start. If no arguments are provided, the function
236 is assumed to be of arity 0. Otherwise it is assumed to be of arity
237 1, taking the list [Arg1,Arg2,...] as argument. All arguments are
238 passed as strings. If an exception is raised, Erlang stops with an
239 error message.
240
241 Example:
242
243 % erl -run foo -run foo bar -run foo bar baz 1 2
244
245 This starts the Erlang runtime system and evaluates the following
246 functions:
247
248 foo:start()
249 foo:bar()
250 foo:bar(["baz", "1", "2"]).
251
252 The functions are executed sequentially in an initialization
253 process, which then terminates normally and passes control to the
254 user. This means that a -run call that does not return blocks fur‐
255 ther processing; to avoid this, use some variant of spawn in such
256 cases.
257
258 -s Mod [Func [Arg1, Arg2, ...]]:
259 Evaluates the specified function call during system initialization.
260 Func defaults to start. If no arguments are provided, the function
261 is assumed to be of arity 0. Otherwise it is assumed to be of arity
262 1, taking the list [Arg1,Arg2,...] as argument. All arguments are
263 passed as atoms. If an exception is raised, Erlang stops with an
264 error message.
265
266 Example:
267
268 % erl -s foo -s foo bar -s foo bar baz 1 2
269
270 This starts the Erlang runtime system and evaluates the following
271 functions:
272
273 foo:start()
274 foo:bar()
275 foo:bar([baz, '1', '2']).
276
277 The functions are executed sequentially in an initialization
278 process, which then terminates normally and passes control to the
279 user. This means that a -s call that does not return blocks further
280 processing; to avoid this, use some variant of spawn in such cases.
281
282 Because of the limited length of atoms, it is recommended to use
283 -run instead.
284
286 % erl -- a b -children thomas claire -ages 7 3 -- x y
287
288 1> init:get_plain_arguments().
289 ["a","b","x","y"]
290 2> init:get_argument(children).
291 {ok,[["thomas","claire"]]}
292 3> init:get_argument(ages).
293 {ok, [["7","3"]]}
294 4> init:get_argument(silly).
295 error
296
298 erl_prim_loader(3), heart(3)
299
300
301
302Ericsson AB erts 11.2 init(3)