#! /bin/sh
### BEGIN INIT INFO
# Provides:          killprocs
# Required-Start:    $local_fs
# Required-Stop:
# Default-Start:     1
# Default-Stop:
# Short-Description: executed by init(8) upon entering runlevel 1 (single).
### END INIT INFO

PATH=/usr/sbin:/usr/bin:/sbin:/bin

. /lib/lsb/init-functions

do_start() {
	# Kill all processes.
	log_action_begin_msg "Asking all remaining processes to terminate"
	killall5 -15 # SIGTERM
	log_action_end_msg 0
	alldead=""
	for seq in 1 2 3 4 5 6 7 8 9 10; do
		# use SIGCONT/signal 18 to check if there are
		# processes left.  No need to check the exit code
		# value, because either killall5 work and it make
		# sense to wait for processes to die, or it fail and
		# there is nothing to wait for.

		if killall5 -18; then
			:
		else
			alldead=1
			break
		fi

		sleep 1
	done
	if [ -z "$alldead" ]; then
		log_action_begin_msg "Killing all remaining processes"
		killall5 -9 # SIGKILL
		log_action_end_msg 1
	else
		log_action_begin_msg "All processes ended within $seq seconds."
		log_action_end_msg 0
	fi
}

case "$1" in
	start)
		do_start
		;;
	restart | reload | force-reload)
		echo "Error: argument '$1' not supported" >&2
		exit 3
		;;
	stop | status)
		# No-op
		;;
	*)
		echo "Usage: $0 start|stop" >&2
		exit 3
		;;
esac
