Penguin
Annotated edit history of init(8) version 3, including all changes. View license author blame.
Rev Author # Line
1 perry 1 !!!INIT
3 JohnMcPherson 2
3
1 perry 4 !!NAME
5
6
7 init, telinit - process control initialization
8 !!SYNOPSIS
9
10
3 JohnMcPherson 11 __/sbin/init__ [[ __-a__ ] [[ __-s__ ] [[ __-b__ ] [[ __-z xxx__ ] [[ __0123456Ss__ ]
1 perry 12
3 JohnMcPherson 13 __/sbin/telinit__ [[ __-t sec__ ] [[__0123456sSQqabcUu__ ]
1 perry 14
15
3 JohnMcPherson 16 !!DESCRIPTION
1 perry 17
18 __Init__ is the parent of all processes. Its primary role
19 is to create processes from a script stored in the file
20 __/etc/inittab__ (see inittab(5)). This file
21 usually has entries which cause __init__ to spawn
22 __getty__s on each line that users can log in. It also
23 controls autonomous processes required by any particular
24 system.
25
3 JohnMcPherson 26 !!RUNLEVELS
1 perry 27
28 A ''runlevel'' is a software configuration of the system
29 which allows only a selected group of processes to exist.
30 The processes spawned by __init__ for each of these
31 runlevels are defined in the __/etc/inittab__ file.
32 __Init__ can be in one of eight runlevels: __0-6__ and
33 __S__ or __s__. The runlevel is changed by having a
34 privileged user run __telinit__, which sends appropriate
35 signals to __init__, telling it which runlevel to change
36 to.
37
38
39 Runlevels __0__, __1__, and __6__ are reserved.
40 Runlevel 0 is used to halt the system, runlevel 6 is used to
41 reboot the system, and runlevel 1 is used to get the system
42 down into single user mode. Runlevel __S__ is not really
43 meant to be used directly, but more for the scripts that are
44 executed when entering runlevel 1. For more information on
45 this, see the manpages for shutdown(8) and
46 inittab(5).
47
48
49 Runlevels 7-9 are also valid, though not really documented.
50 This is because
51 S'' and
52 ''s'' are in fact the same. Internally they are aliases
53 for the same runlevel.
54
3 JohnMcPherson 55 !!BOOTING
1 perry 56
57 After __init__ is invoked as the last step of the kernel
58 boot sequence, it looks for the file __/etc/inittab__ to
59 see if there is an entry of the type __initdefault__ (see
60 inittab(5)). The __initdefault__ entry determines
61 the initial runlevel of the system. If there is no such
62 entry (or no __/etc/inittab__ at all), a runlevel must be
63 entered at the system console.
64
65 Runlevel __S__ or __s__ bring the system to single
66 user mode and do not require an __/etc/inittab__ file. In
67 single user mode, __/sbin/sulogin__ is invoked on
68 __/dev/console__.
69
70 When entering single user mode, __init__ reads the
71 console's ioctl(2) states from
72 __/etc/ioctl.save__. If this file does not exist,
73 __init__ initializes the line at __9600 baud__ and
74 with __CLOCAL__ settings. When __init__ leaves single
75 user mode, it stores the console's ''ioctl'' settings in
76 this file so it can re-use them for the next single-user
77 session.
78
79 When entering a multi-user mode for the first time,
80 __init__ performs the __boot__ and __bootwait__
81 entries to allow file systems to be mounted before users can
82 log in. Then all entries matching the runlevel are
83 processed.
84
85 When starting a new process, __init__ first checks
86 whether the file ''/etc/initscript'' exists. If it does,
87 it uses this script to start the process.
88
89 Each time a child terminates, __init__ records the fact
90 and the reason it died in __/var/run/utmp__ and
91 __/var/log/wtmp__, provided that these files
92 exist.
93
3 JohnMcPherson 94 !!CHANGING RUNLEVELS
1 perry 95
96 After it has spawned all of the processes specified,
97 __init__ waits for one of its descendant processes to
98 die, a powerfail signal, or until it is signaled by
99 __telinit__ to change the system's runlevel. When one of
100 the above three conditions occurs, it re-examines the
101 __/etc/inittab__ file. New entries can be added to this
102 file at any time. However, __init__ still waits for one
103 of the above three conditions to occur. To provide for an
104 instantaneous response, the __telinit Q__ or __q__
105 command can wake up __init__ to re-examine the
106 __/etc/inittab__ file.
107
108 If __init__ is not in single user mode and receives a
109 powerfail signal (SIGPWR), it reads the file
110 __/etc/powerstatus__. It then starts a command based on
111 the contents of this file:
112
113 F(AIL)
114
115 Power is failing, UPS is providing the power. Execute the
116 __powerwait__ and __powerfail__ entries.
117
118 O(K)
119
120 The power has been restored, execute the __powerokwait__
121 entries.
122
123 L(OW)
124
125 The power is failing and the UPS has a low battery. Execute
126 the __powerfailnow__ entries.
127
128 If /etc/powerstatus doesn't exist or contains anything else
129 then the letters __F__, __O__ or __L__, init will
130 behave as if it has read the letter __F__.
131
132 Usage of __SIGPWR__ and __/etc/powerstatus__ is
133 discouraged. Someone wanting to interact with __init__
134 should use the __/dev/initctl__ control channel - see the
135 source code of the __sysvinit__ package for more
136 documentation about this.
137
138 When __init__ is requested to change the runlevel, it
139 sends the warning signal __SIGTERM__ to
140 all processes that are undefined in the new runlevel. It
141 then waits 5 seconds before forcibly terminating these
142 processes via the __SIGKILL__ signal. Note
143 that __init__ assumes that all these processes (and their
144 descendants) remain in the same process group which
145 __init__ originally created for them. If any process
146 changes its process group affiliation it will not receive
147 these signals. Such processes need to be terminated
148 separately.
3 JohnMcPherson 149
1 perry 150 !!TELINIT
151
152 __/sbin/telinit__ is linked to __/sbin/init__. It
153 takes a one-character argument and signals __init__ to
154 perform the appropriate action. The following arguments
155 serve as directives to __telinit__:
156
157 __0__,__1__,__2__,__3__,__4__,__5__ or
158 __6__
159
160 tell __init__ to switch to the specified run
161 level.
162
163 __a__,__b__,__c__
164
165 tell __init__ to process only those __/etc/inittab__
166 file entries having runlevel __a__,__b__ or
167 __c__.
168
169
170 __Q__ or __q__
171
172
173 tell __init__ to re-examine the __/etc/inittab__
174 file.
175
176
177 __S__ or __s__
178
179
180 tell __init__ to switch to single user mode.
181
182
183 __U__ or __u__
184
185
186 tell __init__ to re-execute itself (preserving the
187 state). No re-examining of __/etc/inittab__ file happens.
188 Run level should be one of __Ss12345__, otherwise request
189 would be silently ignored.
190
191
192 __telinit__ can also tell __init__ how long it should
193 wait between sending processes the SIGTERM and SIGKILL
194 signals. The default is 5 seconds, but this can be changed
195 with the __-t sec__ option.
196
197
198 __telinit__ can be invoked only by users with appropriate
199 privileges.
200
201
202 The __init__ binary checks if it is __init__ or
203 __telinit__ by looking at its ''process id''; the real
204 __init__'s process id is always __1__. From this it
205 follows that instead of calling __telinit__ one can also
206 just use __init__ instead as a shortcut.
207 !!ENVIRONMENT
208
209
210 __Init__ sets the following environment variables for all
211 its children:
212
213
214 __PATH__
215
216
217 ''/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin''
218
219
220 __INIT_VERSION__
221
222
223 As the name says. Useful to determine if a script runs
224 directly from __init__.
225
226
227 __RUNLEVEL__
228
229
230 The current system runlevel.
231
232
233 __PREVLEVEL__
234
235
236 The previous runlevel (useful after a runlevel
237 switch).
238
239
240 __CONSOLE__
241
242
243 The system console. This is really inherited from the
244 kernel; however if it is not set __init__ will set it to
245 __/dev/console__ by default.
3 JohnMcPherson 246
247
1 perry 248 !!BOOTFLAGS
249
250 It is possible to pass a number of flags to __init__ from
251 the boot monitor (eg. LILO). __Init__ accepts the
252 following flags:
253
254
255 __-s, S, single__
256
257
258 Single user mode boot. In this mode ''/etc/inittab'' is
259 examined and the bootup rc scripts are usually run before
260 the single user mode shell is started.
261
262 __1-5__
263
264 Runlevel to boot into.
265
266 __-b, emergency__
267
268 Boot directly into a single user shell without running any
269 other startup scripts.
270
271 __-a, auto__
272
3 JohnMcPherson 273 The LILO boot loader adds the word "auto" to the command line if
274 it booted the kernel with the default command line (without
275 user intervention). If this is found init sets the "AUTOBOOT"
276 environment variable to "yes". Note that you cannot use this
277 for any security measures ‐ of course the user could specify
278 "auto" or -a on the command line manually.
1 perry 279
280
281
282 __-z xxx__
283
284
285 The argument to -z is ignored. You can use this to expand
286 the command line a bit, so that it takes some more space on
287 the stack. __Init__ can then manipulate the command line
288 so that ps(1) shows the current
289 runlevel.
290 !!INTERFACE
291
292
293 Init listens on a ''fifo'' in /dev, ''/dev/initctl'',
294 for messages. __Telinit__ uses this to communicate with
295 init. The interface is not very well documented or finished.
296 Those interested should study the ''initreq.h'' file in
297 the ''src/'' subdirectory of the __init__ source code
298 tar archive.
299 !!SIGNALS
300
301
302 Init reacts to several signals:
303
304
305 __SIGHUP__
306
307
308 Init looks for ''/etc/initrunlvl'' and
309 ''/var/log/initrunlvl.'' If one of these files exist and
310 contain an ASCII runlevel, init switches to the new
311 runlevel. ''This is for backwards compatibility only!'' .
312 In the normal case (the files don't exist) init behaves like
313 __telinit q__ was executed.
314
315
316 __SIGUSR1__
317
318
319 On receipt of this signals, init closes and re-opens its
320 control fifo, __/dev/initctl__. Useful for bootscripts
321 when /dev is remounted.
322
323
324 __SIGINT__
325
326
327 Normally the kernel sends this signal to init when
328 CTRL-ALT-DEL is pressed. It activates the ''ctrlaltdel''
329 action.
330
331
332 __SIGWINCH__
333
334
2 perry 335 The kernel sends this signal when the ''!KeyboardSignal''
1 perry 336 key is hit. It activates the ''kbrequest''
337 action.
338 !!CONFORMING TO
339
340
341 __Init__ is compatible with the System V init. It works
342 closely together with the scripts in the directories
343 ''/etc/init.d'' and ''/etc/rc{runlevel}.d''. If your
344 system uses this convention, there should be a ''README''
345 file in the directory ''/etc/init.d'' explaining how
346 these scripts work.
347 !!FILES
348
349
350 /etc/inittab
351 /etc/initscript
352 /dev/console
353 /etc/ioctl.save
354 /var/run/utmp
355 /var/log/wtmp
356 /dev/initctl
357 !!WARNINGS
358
359
360 __Init__ assumes that processes and descendants of
361 processes remain in the same process group which was
362 originally created for them. If the processes change their
363 group, __init__ can't kill them and you may end up with
364 two processes reading from one terminal line.
365 !!DIAGNOSTICS
366
367
368 If __init__ finds that it is continuously respawning an
369 entry more than 10 times in 2 minutes, it will assume that
370 there is an error in the command string, generate an error
371 message on the system console, and refuse to respawn this
372 entry until either 5 minutes has elapsed or it receives a
373 signal. This prevents it from eating up system resources
374 when someone makes a typographical error in the
375 __/etc/inittab__ file or the program for the entry is
376 removed.
377 !!AUTHOR
378
379
3 JohnMcPherson 380 Miquel van Smoorenburg (miquels''@''cistron.nl), initial manual
1 perry 381 page by Michael Haardt
3 JohnMcPherson 382 (u31b3hs''@''pool.informatik.rwth-aachen.de).
383
1 perry 384 !!SEE ALSO
385
386
387 getty(1), login(1), sh(1),
3 JohnMcPherson 388 runlevel(8), shutdown(8), kill(1),
1 perry 389 inittab(5), initscript(5),
390 utmp(5)
391 ----
This page is a man page (or other imported legacy content). We are unable to automatically determine the license status of this page.

PHP Warning

lib/blame.php:177: Warning: Invalid argument supplied for foreach() (...repeated 32 times)