#! /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 setvar PATH = "/sbin:/usr/sbin:/bin:/usr/bin" source /lib/lsb/init-functions proc do_start { # Kill all processes. log_action_begin_msg "Asking all remaining processes to terminate" killall5 -15 # SIGTERM log_action_end_msg 0 setvar alldead = """" for seq in 1 2 3 4 5 6 7 8 9 10 { # 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 { : } else { setvar alldead = '1' break } sleep 1 } if test -z $alldead { 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 } } case (1) { 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 } }