svn commit: r216823 - head/sbin/shutdown

Yar Tikhiy yar at freebsd.org
Sat Jan 1 22:31:31 UTC 2011


On Sun, Jan 2, 2011 at 1:57 AM, Jilles Tjoelker <jilles at stack.nl> wrote:
> On Fri, Dec 31, 2010 at 02:57:17PM -0700, Warner Losh wrote:
>> On 12/31/2010 07:43, Jilles Tjoelker wrote:
>> > On Thu, Dec 30, 2010 at 06:06:31PM +0000, Pawel Jakub Dawidek wrote:
>> >> Author: pjd
>> >> Date: Thu Dec 30 18:06:31 2010
>> >> New Revision: 216823
>> >> URL: http://svn.freebsd.org/changeset/base/216823
>> >> Log:
>> >>    For compatibility with Linux and Solaris add poweroff(8).
>> >>    It is implemented as a hard link to shutdown(8) and it is equivalent of:
>> >>            # shutdown -p now
>> > If we go that way, then for consistency reboot(8) and halt(8) should
>> > also be equivalent to calling shutdown -r now and shutdown -h now
>> > respectively, unless conflicting options are given. Linux has a -f
>> > option for what's currently reboot's and halt's default action, and
>> > fastboot(8)/fasthalt(8) could also retain the current behaviour.
>
>> > I would be in favour of this change.
>> I'm not sure I'd go this far.  I really *LIKE* that halt/reboot is the
>> low-level interface that shutdown -r now calls.  I'm not sure that
>> moving away from this would be a good idea.  It cuts out many levels of
>> indirection that can be useful in many instances.
>
> But that's not how it works. After printing all the warnings,
> shutdown(8) signals init. Ctrl+Alt+Del also signals init (and that's
> nontrivial to change, because it's in the kernel).
>
> Only if the strange -o option is used does shutdown execute reboot(8) or
> halt(8).
>
> I think the canonical low-level interface should be sending signals to
> init. reboot(8) and halt(8) doing things on their own should be banished
> to non-default options. (Something should be fixed first so that
> /etc/rc.d/mixer doesn't destroy the user's settings from single-user
> mode.)

I'd say we've got two different, if related, issues here.

One is how to prevent people from foot-shooting and the system from
doing unforeseen harm to itself when the multi-user shutdown procedure
is triggered while in single-user mode.  Init(8) should know which
mode the system is currently in, so it can a) refrain from running
/etc/rc.shutdown unless /etc/rc ran, and b) expose the current mode
via a sysctl writeable by PID 1 only for the benefit of other system
components.

The other issue is whether it is OK to change the traditional BSD
semantics of reboot(8) and halt(8).  At first glance, this doesn't
seem to be a good idea.  However, it might be that, as soon as issue 1
is fixed, the residual difference between shutdown and reboot/halt
won't be that important.  Moreover, I dare guess that BSD beginners
can be confused by the current reboot/halt semantics and so they can
be prone to foot-shooting by leaving no chance to a big and slow
daemon to stop properly when in multi-user mode.  What seems obvious
to us old Unix fogeys isn't necessarily intuitive, natural or optimal.
 See <http://dilbert.com/strips/comic/2010-12-23/>. :-)

Yar


More information about the svn-src-all mailing list