diff options
-rw-r--r-- | functions | 14 | ||||
-rwxr-xr-x | rc.shutdown | 16 |
2 files changed, 23 insertions, 7 deletions
@@ -130,6 +130,20 @@ status() { fi } +# usage : in_array( $needle, $haystack ) +# return : 0 - found +# 1 - not found +# Copied from makepkg +in_array() { + local needle=$1; shift + [ -z "$1" ] && return 1 # Not Found + local item + for item in "$@"; do + [ "$item" = "$needle" ] && return 0 # Found + done + return 1 # Not Found +} + # daemons: add_daemon() { diff --git a/rc.shutdown b/rc.shutdown index 96611b7..1e1c6bf 100755 --- a/rc.shutdown +++ b/rc.shutdown @@ -23,7 +23,15 @@ if [ -x /etc/rc.local.shutdown ]; then fi if [ "$PREVLEVEL" = "3" -o "$PREVLEVEL" = "5" ]; then - # Shutdown daemons + # 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 @@ -31,12 +39,6 @@ if [ "$PREVLEVEL" = "3" -o "$PREVLEVEL" = "5" ]; then fi let i=i-1 done - # find any leftover daemons and shut them down in reverse order - if [ -d /var/run/daemons ]; then - for daemon in $(/bin/ls -1t /var/run/daemons); do - stop_daemon $daemon - done - fi fi # Terminate all processes |