Fortunately, shutting down the Linux system is much simpler than booting and startup. However, it’s not just a matter of hitting the reset switch. Linux, like all Unix systems, buffers disk reads and writes in memory. This means disk writes are delayed until absolutely necessary, and multiple reads on the same disk block are served directly from RAM. This greatly increases performance as disks are extremely slow relative to the CPU.
The problem is that if the system were to be suddenly powered down or
rebooted, the buffers in memory would not be written to disk, and
data could be lost or corrupted.
/sbin/update
is a program started from
/etc/rc.d/boot
on most systems; it flushes dirty
buffers (ones that have been changed since they were read from the
disk) back to disk every five seconds to prevent serious damage from
occurring should the system crash. However, to be completely safe,
the system needs to undergo a
“safe” shutdown before rebooting.
This will not only ensure that disk buffers are properly
synchronized, but also allow all running processes to exit cleanly.
shutdown is the general, all-purpose command used
to halt or reboot the system. As root
, you can
issue the command:
/sbin/shutdown -r +10
to cause the system to reboot in 10 minutes. The -r
switch indicates the system should be rebooted after shutdown, and
+10
is the amount of time to wait (in minutes)
until shutting down. The system will print a warning message to all
active terminals, counting down until the shutdown time. You can add
your own warning message by including it on the command line, as in:
/sbin/shutdown -r +10 "Rebooting to try new kernel"
You can also specify an absolute time to shutdown, as in:
/sbin/shutdown -r 13:00
to reboot at 1:00 pm. Likewise, you can say:
/sbin/shutdown -r now
to reboot immediately (after the safe shutdown process).
Using the -h
switch instead of -r
will cause the system to simply be halted after shutdown; you can
then turn off the system power without fear of losing data. If you
specify neither -h
nor -r
, the
system will go into single-user mode.
As we saw in Section 5.3.2, you can have
init catch the Ctrl-Alt-Delete key sequence and
execute a shutdown command in response to it. If
you’re used to rebooting your system in this way it
might be a good idea to check that your
/etc/inittab
contains a
ctrlaltdel
entry. Note that you should never
reboot your Linux system by pressing the system power switch or the
reboot switch on the front panel of your machine. Unless the system
is flat-out hung (a rare occurrence), you should always use
shutdown. The great thing about a multiprocessing
system is that one program may hang, but you can almost always switch
to another window or virtual console to recover.
shutdown provides a number of other options. The
-c
switch will cancel a currently running shutdown.
(Of course, you can kill the process by hand using
kill, but shutdown -c might be
easier.) The -k
switch will print the warning
messages but not actually shut down the system. See the manual page
for shutdown(8) if you’re
interested in the gory details.