FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > ArchLinux > ArchLinux General Discussion

 
 
LinkBack Thread Tools
 
Old 07-02-2010, 09:21 AM
"Kurt J. Bosch"
 
Default Both rc.single and rc.shutdown use the same code to kill everything.

Am 2010-06-30 23:47, schrieb Victor Lowther:

Move that shared code into functions.
---
functions | 29 +++++++++++++++++++++++++++++
rc.shutdown | 32 +-------------------------------
rc.single | 27 +--------------------------
3 files changed, 31 insertions(+), 57 deletions(-)

diff --git a/functions b/functions
index d8e8e54..bf6ed45 100644
--- a/functions
+++ b/functions
@@ -203,6 +203,35 @@ ck_status() {
fi
}

+kill_everything() {
+ # Find daemons NOT in the DAEMONS array. Shut these down first
+ for daemon in /var/run/daemons/*; do
+ [[ -f $daemon ]] || continue
+ daemon=${daemon##*/}
+ in_array "$daemon" "${DAEMONS[@]}" || stop_daemon "$daemon"
+ done
+
+ # Shutdown daemons in reverse order
+ for ((i=${#DAEMONS[@]}-1; i>=0; i--)); do
+ [[ ${DAEMONS[$i]:0:1} = '!' ]]&& continue
+ ck_daemon ${DAEMONS[$i]#@} || stop_daemon ${DAEMONS[$i]#@}
+ done
+
+ # Terminate all processes
+ stat_busy "Sending SIGTERM To Processes"
+ run_hook single_prekillall


This line should be run_hook "${0##*/rc.}"_prekillall IMHO



+ /sbin/killall5 -15&> /dev/null
+ /bin/sleep 5
+ stat_done
+
+ stat_busy "Sending SIGKILL To Processes"
+ /sbin/killall5 -9&> /dev/null
+ /bin/sleep 1
+ stat_done
+
+ run_hook single_postkillall


Similar as above.


+}
+
###############################
# Custom hooks in initscripts #
###############################
diff --git a/rc.shutdown b/rc.shutdown
index 002a45d..ef9b16d 100755
--- a/rc.shutdown
+++ b/rc.shutdown
@@ -19,37 +19,7 @@ echo " "
[[ -x /bin/domainname ]]&& /bin/domainname ""
[[ -x /etc/rc.local.shutdown ]]&& /etc/rc.local.shutdown

-
-# Find daemons NOT in the DAEMONS array. Shut these down first
-if [ -d /var/run/daemons ]; then
- for daemon in $(/bin/ls -1t /var/run/daemons); do
- if ! in_array $daemon ${DAEMONS[@]}; then
- stop_daemon $daemon
- fi
- done
-fi
-# Shutdown daemons in reverse order
-let i=${#DAEMONS[@]}-1
-while [ $i -ge 0 ]; do
- if [ "${DAEMONS[$i]:0:1}" != '!' ]; then
- ck_daemon ${DAEMONS[$i]#@} || stop_daemon ${DAEMONS[$i]#@}
- fi
- let i=i-1
-done
-
-# Terminate all processes
-stat_busy "Sending SIGTERM To Processes"
-run_hook shutdown_prekillall
-/sbin/killall5 -15&> /dev/null
-/bin/sleep 5
-stat_done
-
-stat_busy "Sending SIGKILL To Processes"
-/sbin/killall5 -9&> /dev/null
-/bin/sleep 1
-stat_done
-
-run_hook shutdown_postkillall
+kill_everything

stat_busy "Saving Random Seed"
RANDOM_SEED=/var/lib/misc/random-seed
diff --git a/rc.single b/rc.single
index aa27be0..a84ece8 100755
--- a/rc.single
+++ b/rc.single
@@ -9,33 +9,8 @@
run_hook single_start

if [[ $PREVLEVEL != N ]]; then
- # Find daemons NOT in the DAEMONS array. Shut these down first
- for daemon in /var/run/daemons/*; do
- [[ -f $daemon ]] || continue
- daemon=${daemon##*/}
- in_array "$daemon" "${DAEMONS[@]}" || stop_daemon "$daemon"
- done
-
- # Shutdown daemons in reverse order
- for ((i=${#DAEMONS[@]}-1; i>=0; i--)); do
- [[ ${DAEMONS[$i]:0:1} = '!' ]]&& continue
- ck_daemon ${DAEMONS[$i]#@} || stop_daemon ${DAEMONS[$i]#@}
- done
-
- # Terminate all processes
- stat_busy "Sending SIGTERM To Processes"
- run_hook single_prekillall
- /sbin/killall5 -15&> /dev/null
- /bin/sleep 5
- stat_done
-
- stat_busy "Sending SIGKILL To Processes"
- /sbin/killall5 -9&> /dev/null
- /bin/sleep 1
- stat_done
-
- run_hook single_postkillall

+ kill_everything
stat_busy "Starting UDev Daemon"
/sbin/udevd --daemon
stat_done
 
Old 07-02-2010, 09:27 AM
Thomas Bächler
 
Default Both rc.single and rc.shutdown use the same code to kill everything.

First of all, sorry for not continuing the review yesterday, time is
short

Still, I'll finish this, as I'd like to have this applied eventually.

Am 02.07.2010 11:21, schrieb Kurt J. Bosch:
> Am 2010-06-30 23:47, schrieb Victor Lowther:
>> Move that shared code into functions.
>> ---
>> functions | 29 +++++++++++++++++++++++++++++
>> rc.shutdown | 32 +-------------------------------
>> rc.single | 27 +--------------------------
>> 3 files changed, 31 insertions(+), 57 deletions(-)
>>
>> diff --git a/functions b/functions
>> index d8e8e54..bf6ed45 100644
>> --- a/functions
>> +++ b/functions
>> @@ -203,6 +203,35 @@ ck_status() {
>> fi
>> }
>>
>> +kill_everything() {
>> + # Find daemons NOT in the DAEMONS array. Shut these down first
>> + for daemon in /var/run/daemons/*; do
>> + [[ -f $daemon ]] || continue
>> + daemon=${daemon##*/}
>> + in_array "$daemon" "${DAEMONS[@]}" || stop_daemon "$daemon"
>> + done
>> +
>> + # Shutdown daemons in reverse order
>> + for ((i=${#DAEMONS[@]}-1; i>=0; i--)); do
>> + [[ ${DAEMONS[$i]:0:1} = '!' ]]&& continue
>> + ck_daemon ${DAEMONS[$i]#@} || stop_daemon ${DAEMONS[$i]#@}
>> + done
>> +
>> + # Terminate all processes
>> + stat_busy "Sending SIGTERM To Processes"
>> + run_hook single_prekillall
>
> This line should be run_hook "${0##*/rc.}"_prekillall IMHO

Kurt is right here. We call this code from rc.single and rc.shutdown I
think. We use two distinct hooks, you can register functions for these
hooks independently!
 
Old 08-31-2010, 08:07 AM
"Kurt J. Bosch"
 
Default Both rc.single and rc.shutdown use the same code to kill everything.

2010-07-02 11:27, Thomas Bächler:

First of all, sorry for not continuing the review yesterday, time is
short

Still, I'll finish this, as I'd like to have this applied eventually.

Am 02.07.2010 11:21, schrieb Kurt J. Bosch:

Am 2010-06-30 23:47, schrieb Victor Lowther:

Move that shared code into functions.
+ run_hook single_prekillall


This line should be run_hook "${0##*/rc.}"_prekillall IMHO


Kurt is right here. We call this code from rc.single and rc.shutdown I
think. We use two distinct hooks, you can register functions for these
hooks independently!



Hmm, git bashification-redux has now:

kill_everything() {
# $1 = where we are being called from.
# This is used to determine which hooks to run.
# Find daemons NOT in the DAEMONS array. Shut these down first
for daemon in /var/run/daemons/*; do
[[ -f $daemon ]] || continue
daemon=${daemon##*/}
in_array "$daemon" "${DAEMONS[@]}" || stop_daemon "$daemon"
done

# Shutdown daemons in reverse order
for ((i=${#DAEMONS[@]}-1; i>=0; i--)); do
[[ ${DAEMONS[$i]:0:1} = '!' ]] && continue
ck_daemon ${DAEMONS[$i]#@} || stop_daemon ${DAEMONS[$i]#@}
done

# Terminate all processes
stat_busy "Sending SIGTERM To Processes"
run_hook "$1_prekillall"
/sbin/killall5 -15 &> /dev/null
/bin/sleep 5
stat_done

stat_busy "Sending SIGKILL To Processes"
/sbin/killall5 -9 &> /dev/null
/bin/sleep 1
stat_done

run_hook "$1_postkillall"
}

I suggest:

From b202be97f8dc1c0c68aaea792d4457c674c673f3 Mon Sep 17 00:00:00 2001
From: Kurt J. Bosch <kjb-temp-2009@alpenjodel.de>
Date: Tue, 31 Aug 2010 09:57:47 +0200
Subject: [PATCH 17/17] Correct behaviour of kill_everything()

---
functions | 11 +++++------
1 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/functions b/functions
index b9ba718..3ca7324 100644
--- a/functions
+++ b/functions
@@ -205,10 +205,9 @@ ck_status() {
kill_everything() {
# $1 = where we are being called from.
# This is used to determine which hooks to run.
- # Find daemons NOT in the DAEMONS array. Shut these down first
- for daemon in /var/run/daemons/*; do
- [[ -f $daemon ]] || continue
- daemon=${daemon##*/}
+ # Find daemons NOT in the DAEMONS array.
+ # Shut these down first in reverse order.
+ for daemon in $( /bin/ls -t /var/run/daemons ); do
in_array "$daemon" "${DAEMONS[@]}" || stop_daemon "$daemon"
done

@@ -220,7 +219,7 @@ kill_everything() {

# Terminate all processes
stat_busy "Sending SIGTERM To Processes"
- run_hook "$1_prekillall"
+ run_hook "${1}_prekillall"
/sbin/killall5 -15 &> /dev/null
/bin/sleep 5
stat_done
@@ -230,7 +229,7 @@ kill_everything() {
/bin/sleep 1
stat_done

- run_hook "$1_postkillall"
+ run_hook "${1}_postkillall"
}

activate_vgs() {
--
1.7.0.3
 
Old 08-31-2010, 11:16 AM
Dave Reisner
 
Default Both rc.single and rc.shutdown use the same code to kill everything.

On Tue, Aug 31, 2010 at 10:07:52AM +0200, Kurt J. Bosch wrote:
> --snip--
>
> I suggest:
>
> From b202be97f8dc1c0c68aaea792d4457c674c673f3 Mon Sep 17 00:00:00 2001
> From: Kurt J. Bosch <kjb-temp-2009@alpenjodel.de>
> Date: Tue, 31 Aug 2010 09:57:47 +0200
> Subject: [PATCH 17/17] Correct behaviour of kill_everything()
>
> ---
> functions | 11 +++++------
> 1 files changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/functions b/functions
> index b9ba718..3ca7324 100644
> --- a/functions
> +++ b/functions
> @@ -205,10 +205,9 @@ ck_status() {
> kill_everything() {
> # $1 = where we are being called from.
> # This is used to determine which hooks to run.
> - # Find daemons NOT in the DAEMONS array. Shut these down first
> - for daemon in /var/run/daemons/*; do
> - [[ -f $daemon ]] || continue
> - daemon=${daemon##*/}
> + # Find daemons NOT in the DAEMONS array.
> + # Shut these down first in reverse order.
> + for daemon in $( /bin/ls -t /var/run/daemons ); do
> in_array "$daemon" "${DAEMONS[@]}" || stop_daemon "$daemon"
> done
>
> @@ -220,7 +219,7 @@ kill_everything() {
>
> # Terminate all processes
> stat_busy "Sending SIGTERM To Processes"
> - run_hook "$1_prekillall"
> + run_hook "${1}_prekillall"
> /sbin/killall5 -15 &> /dev/null
> /bin/sleep 5
> stat_done
> @@ -230,7 +229,7 @@ kill_everything() {
> /bin/sleep 1
> stat_done
>
> - run_hook "$1_postkillall"
> + run_hook "${1}_postkillall"
> }
>
> activate_vgs() {
> --
> 1.7.0.3
>

Parsing the output of ls will never be better than using shell globbing
no matter how much simpler it might make the code appear to be. Not only
are you avoiding a fork, but the shell glob will properly handle any odd
characters thrown into the mix. You'll see breakage on something as
simple as a space in your suggestion. While I'm inclined to believe that
there will never be a space in the name of a daemon in Arch, if we're
going for pure Bash in this rewrite, let's use Bash instead of
mindlessly forking.

The only useful change here is to remove the line:

[[ -f $daemon ]] || continue

and instead call 'shopt -s nullglob' outside the loop. Sorry for the
no-patch patch.

d
 
Old 09-01-2010, 10:41 AM
"Kurt J. Bosch"
 
Default Both rc.single and rc.shutdown use the same code to kill everything.

2010-08-31 13:16, Dave Reisner:

On Tue, Aug 31, 2010 at 10:07:52AM +0200, Kurt J. Bosch wrote:

--snip--

I suggest:

From b202be97f8dc1c0c68aaea792d4457c674c673f3 Mon Sep 17 00:00:00 2001
From: Kurt J. Bosch<kjb-temp-2009@alpenjodel.de>
Date: Tue, 31 Aug 2010 09:57:47 +0200
Subject: [PATCH 17/17] Correct behaviour of kill_everything()

---
functions | 11 +++++------
1 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/functions b/functions
index b9ba718..3ca7324 100644
--- a/functions
+++ b/functions
@@ -205,10 +205,9 @@ ck_status() {
kill_everything() {
# $1 = where we are being called from.
# This is used to determine which hooks to run.
- # Find daemons NOT in the DAEMONS array. Shut these down first
- for daemon in /var/run/daemons/*; do
- [[ -f $daemon ]] || continue
- daemon=${daemon##*/}
+ # Find daemons NOT in the DAEMONS array.
+ # Shut these down first in reverse order.
+ for daemon in $( /bin/ls -t /var/run/daemons ); do
in_array "$daemon" "${DAEMONS[@]}" || stop_daemon "$daemon"
done

@@ -220,7 +219,7 @@ kill_everything() {

# Terminate all processes
stat_busy "Sending SIGTERM To Processes"
- run_hook "$1_prekillall"
+ run_hook "${1}_prekillall"
/sbin/killall5 -15&> /dev/null
/bin/sleep 5
stat_done
@@ -230,7 +229,7 @@ kill_everything() {
/bin/sleep 1
stat_done

- run_hook "$1_postkillall"
+ run_hook "${1}_postkillall"
}

activate_vgs() {
--
1.7.0.3



Parsing the output of ls will never be better than using shell globbing
no matter how much simpler it might make the code appear to be. Not only
are you avoiding a fork, but the shell glob will properly handle any odd
characters thrown into the mix. You'll see breakage on something as
simple as a space in your suggestion. While I'm inclined to believe that
there will never be a space in the name of a daemon in Arch, if we're
going for pure Bash in this rewrite, let's use Bash instead of
mindlessly forking.

NAK. The patch just reverts breaking of the current behaviour which is
shutdown daemons in reverse order of start. AFAIK bash globbing is
unable to sort on timestamps, right? p
 
Old 09-01-2010, 11:03 AM
Dave Reisner
 
Default Both rc.single and rc.shutdown use the same code to kill everything.

On Wed, Sep 01, 2010 at 12:41:04PM +0200, Kurt J. Bosch wrote:
> 2010-08-31 13:16, Dave Reisner:
> >On Tue, Aug 31, 2010 at 10:07:52AM +0200, Kurt J. Bosch wrote:
> >>--snip--
> >>
> >>I suggest:
> >>
> >> From b202be97f8dc1c0c68aaea792d4457c674c673f3 Mon Sep 17 00:00:00 2001
> >>From: Kurt J. Bosch<kjb-temp-2009@alpenjodel.de>
> >>Date: Tue, 31 Aug 2010 09:57:47 +0200
> >>Subject: [PATCH 17/17] Correct behaviour of kill_everything()
> >>
> >>---
> >> functions | 11 +++++------
> >> 1 files changed, 5 insertions(+), 6 deletions(-)
> >>
> >>diff --git a/functions b/functions
> >>index b9ba718..3ca7324 100644
> >>--- a/functions
> >>+++ b/functions
> >>@@ -205,10 +205,9 @@ ck_status() {
> >> kill_everything() {
> >> # $1 = where we are being called from.
> >> # This is used to determine which hooks to run.
> >>- # Find daemons NOT in the DAEMONS array. Shut these down first
> >>- for daemon in /var/run/daemons/*; do
> >>- [[ -f $daemon ]] || continue
> >>- daemon=${daemon##*/}
> >>+ # Find daemons NOT in the DAEMONS array.
> >>+ # Shut these down first in reverse order.
> >>+ for daemon in $( /bin/ls -t /var/run/daemons ); do
> >> in_array "$daemon" "${DAEMONS[@]}" || stop_daemon "$daemon"
> >> done
> >>
> >>@@ -220,7 +219,7 @@ kill_everything() {
> >>
> >> # Terminate all processes
> >> stat_busy "Sending SIGTERM To Processes"
> >>- run_hook "$1_prekillall"
> >>+ run_hook "${1}_prekillall"
> >> /sbin/killall5 -15&> /dev/null
> >> /bin/sleep 5
> >> stat_done
> >>@@ -230,7 +229,7 @@ kill_everything() {
> >> /bin/sleep 1
> >> stat_done
> >>
> >>- run_hook "$1_postkillall"
> >>+ run_hook "${1}_postkillall"
> >> }
> >>
> >> activate_vgs() {
> >>--
> >>1.7.0.3
> >>
> >
> >Parsing the output of ls will never be better than using shell globbing
> >no matter how much simpler it might make the code appear to be. Not only
> >are you avoiding a fork, but the shell glob will properly handle any odd
> >characters thrown into the mix. You'll see breakage on something as
> >simple as a space in your suggestion. While I'm inclined to believe that
> >there will never be a space in the name of a daemon in Arch, if we're
> >going for pure Bash in this rewrite, let's use Bash instead of
> >mindlessly forking.
> >
> NAK. The patch just reverts breaking of the current behaviour which
> is shutdown daemons in reverse order of start. AFAIK bash globbing
> is unable to sort on timestamps, right? p
>

The _current_ behavior doesn't define an order unless its in DAEMONS.
I've reverted _your_ behavior, which I don't feel has proper
justification.

Suppose I start daemons foo, bar and baz (in that order) after Arch
boots. Why then, should the shutdown order of these daemons change
merely because I had to restart bar, which is independent of foo and
baz?

d
 
Old 09-01-2010, 03:29 PM
Victor Lowther
 
Default Both rc.single and rc.shutdown use the same code to kill everything.

On Wed, Sep 1, 2010 at 5:41 AM, Kurt J. Bosch
<kjb-temp-2009@alpenjodel.de> wrote:
> 2010-08-31 13:16, Dave Reisner:
>>
>> On Tue, Aug 31, 2010 at 10:07:52AM +0200, Kurt J. Bosch wrote:
>>>
>>> --snip--
>>>
>>> I suggest:
>>>
>>> *From b202be97f8dc1c0c68aaea792d4457c674c673f3 Mon Sep 17 00:00:00 2001
>>> From: Kurt J. Bosch<kjb-temp-2009@alpenjodel.de>
>>> Date: Tue, 31 Aug 2010 09:57:47 +0200
>>> Subject: [PATCH 17/17] Correct behaviour of kill_everything()
>>>
>>> ---
>>> *functions | * 11 +++++------
>>> *1 files changed, 5 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/functions b/functions
>>> index b9ba718..3ca7324 100644
>>> --- a/functions
>>> +++ b/functions
>>> @@ -205,10 +205,9 @@ ck_status() {
>>> *kill_everything() {
>>> * * *# $1 = where we are being called from.
>>> * * *# This is used to determine which hooks to run.
>>> - * *# Find daemons NOT in the DAEMONS array. Shut these down first
>>> - * *for daemon in /var/run/daemons/*; do
>>> - * * * *[[ -f $daemon ]] || continue
>>> - * * * *daemon=${daemon##*/}
>>> + * *# Find daemons NOT in the DAEMONS array.
>>> + * *# Shut these down first in reverse order.
>>> + * *for daemon in $( /bin/ls -t /var/run/daemons ); do
>>> * * * *in_array "$daemon" "${DAEMONS[@]}" || stop_daemon "$daemon"
>>> * * *done
>>>
>>> @@ -220,7 +219,7 @@ kill_everything() {
>>>
>>> * * * *# Terminate all processes
>>> * * *stat_busy "Sending SIGTERM To Processes"
>>> - * *run_hook "$1_prekillall"
>>> + * *run_hook "${1}_prekillall"
>>> * * */sbin/killall5 -15&> */dev/null
>>> * * */bin/sleep 5
>>> * * *stat_done
>>> @@ -230,7 +229,7 @@ kill_everything() {
>>> * * */bin/sleep 1
>>> * * *stat_done
>>>
>>> - * *run_hook "$1_postkillall"
>>> + * *run_hook "${1}_postkillall"
>>> *}
>>>
>>> *activate_vgs() {
>>> --
>>> 1.7.0.3
>>>
>>
>> Parsing the output of ls will never be better than using shell globbing
>> no matter how much simpler it might make the code appear to be. Not only
>> are you avoiding a fork, but the shell glob will properly handle any odd
>> characters thrown into the mix. You'll see breakage on something as
>> simple as a space in your suggestion. While I'm inclined to believe that
>> there will never be a space in the name of a daemon in Arch, if we're
>> going for pure Bash in this rewrite, let's use Bash instead of
>> mindlessly forking.
>>
> NAK. The patch just reverts breaking of the current behaviour which is
> shutdown daemons in reverse order of start. AFAIK bash globbing is unable to
> sort on timestamps, right?

Bash globbing cannot handle it, but bash knows how to test file
timestamps, so we could code something up that handles killing the
daemons in reverse timestamp order if we had to. However, there is no
reason to think that the order is significant for daemons not in
$DAEMONS. If there are any dependencies that this code does not
handle gracefully, the offending daemons will be killed when we kill
-15 and then kill -9 the rest of the processes. If a daemon does not
handle SIGTERM gracefully because of dependency issues, it has other,
more significant problems.
 
Old 09-01-2010, 05:30 PM
"Kurt J. Bosch"
 
Default Both rc.single and rc.shutdown use the same code to kill everything.

2010-09-01 13:03, Dave Reisner:


The _current_ behavior doesn't define an order unless its in DAEMONS.
I've reverted _your_ behavior, which I don't feel has proper
justification.

I referred to extras/initscripts which indeed does. Please read the
code:
http://projects.archlinux.org/initscripts.git/tree/rc.shutdown?id=2010.07-1



Suppose I start daemons foo, bar and baz (in that order) after Arch
boots. Why then, should the shutdown order of these daemons change
merely because I had to restart bar, which is independent of foo and
baz?

Because you know which is the right order and rc.shutdown just rolls
back what you did. ^^
 
Old 09-01-2010, 05:42 PM
"Kurt J. Bosch"
 
Default Both rc.single and rc.shutdown use the same code to kill everything.

2010-09-01 17:29, Victor Lowther:


Bash globbing cannot handle it, but bash knows how to test file
timestamps, so we could code something up that handles killing the
daemons in reverse timestamp order if we had to. However, there is no
reason to think that the order is significant for daemons not in
$DAEMONS. If there are any dependencies that this code does not
handle gracefully, the offending daemons will be killed when we kill
-15 and then kill -9 the rest of the processes. If a daemon does not
handle SIGTERM gracefully because of dependency issues, it has other,
more significant problems.

I really don't know if this 'feature' is actually still wanted or
needed, but I feel it should be dropped in a separate commit if ever.
 
Old 09-01-2010, 08:52 PM
Dave Reisner
 
Default Both rc.single and rc.shutdown use the same code to kill everything.

On Wed, Sep 01, 2010 at 07:30:45PM +0200, Kurt J. Bosch wrote:
> 2010-09-01 13:03, Dave Reisner:
> >
> >The _current_ behavior doesn't define an order unless its in DAEMONS.
> >I've reverted _your_ behavior, which I don't feel has proper
> >justification.
> >
> I referred to extras/initscripts which indeed does. Please read the
> code: http://projects.archlinux.org/initscripts.git/tree/rc.shutdown?id=2010.07-1
>

Indeed, I was mistaken. However, I still stand by the idea that trying
to parse the output of /bin/ls is flawed from the ground up. ls is made
for human parsing, not programatical parsing.

> >Suppose I start daemons foo, bar and baz (in that order) after Arch
> >boots. Why then, should the shutdown order of these daemons change
> >merely because I had to restart bar, which is independent of foo and
> >baz?
> >
> Because you know which is the right order and rc.shutdown just rolls
> back what you did. ^^
>
>

No, rc.shutdown does _not_ know the right order. The current behavior is
broken. Example:

1) start network
2) start rpcbind
3) start nfs-common
4) restart network

network now shuts down first, rendering the OS unable to cleanly close
any outstanding nfs shares. This commonly results in a long hang at
shutdown and the possibility of truncated files.

d
 

Thread Tools




All times are GMT. The time now is 02:34 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright ©2007 - 2008, www.linux-archive.org