[PATCH] Speedup killproc

Dan Nicholson dbn.lists at gmail.com
Tue Apr 24 11:06:31 PDT 2007


On 4/17/07, Dan Nicholson <dbn.lists at gmail.com> wrote:
> On 4/17/07, Matthew Burgess <matthew at linuxfromscratch.org> wrote:
> > On Tuesday 17 April 2007 05:15, Dan Nicholson wrote:
> >
> > > Index: bootscripts/lfs/init.d/functions
> > > ===================================================================
> > > --- bootscripts/lfs/init.d/functions    (revision 8076)
> > > +++ bootscripts/lfs/init.d/functions    (working copy)
> > > @@ -657,11 +657,12 @@
> > >                 # Wait up to 3 seconds, for ${pid} to terminate
> > >                 case "${killsig}" in
> > >                 TERM|SIGTERM|KILL|SIGKILL)
> > > -                       local dtime=${KILLDELAY}
> > > +                       # sleep in 1/10ths of seconds
> > > +                       local dtime="${KILLDELAY}0"
>
> A 0 is added to KILLDELAY to essentially multiply by 10.
>
> > >                         while [ "${dtime}" != "0" ]
> > >                         do
> > >                                 kill -0 ${pid} 2>/dev/null || break
> > > -                               sleep 1
> > > +                               sleep 0.1
> > >                                 dtime=$(( ${dtime} - 1))
> >
> > I think the above needs to be:
> >
> > dtime=$(( ${dtime - 0.1)) otherwise we're not going to wait for 3 seconds.  I
> > suspect this might be why your bootups have a far shorter delay ;)
>
> This isn't possible because the shell arithmetic $(( )) only handles
> integers. But multiplying the value of KILLDELAY (seconds) should make
> this work. I.e., dtime="${KILLDELAY}0" (dtime=30), sleep 0.1, dtime--
> (dtime=29).

I just installed another system without the above tweak and noticed
how slow it makes shutdown. No one replied confirming/denying my above
statements, so here's a quick test to show that this is functionally
equivalent.

$ time {
KILLDELAY=3
dtime=$KILLDELAY
while [ "$dtime" != 0 ]; do
    sleep 1
    dtime=$(($dtime - 1))
done
}

real    0m3.007s
user    0m0.001s
sys     0m0.001s

$ time {
KILLDELAY=30
dtime=$KILLDELAY
while [ "$dtime" != 0 ]; do
    sleep 0.1
    dtime=$(($dtime - 1))
done
}

real    0m3.070s
user    0m0.000s
sys     0m0.001s

Does anyone object to this?

--
Dan



More information about the lfs-dev mailing list