[arch-general] [PATCH 21/48] Both rc.single and rc.shutdown use the same code to kill everything.

Kurt J. Bosch kjb-temp-2009 at alpenjodel.de
Fri Jul 2 05:21:34 EDT 2010


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




More information about the arch-general mailing list