#!/usr/bin/env bash set -x THIS_DIR="$(cd "$(dirname $(readlink -e "${BASH_SOURCE[0]}"))" && pwd)" function main { mkdir -p "${THIS_DIR}/log" mkdir -p "${THIS_DIR}/db" mkdir -p "${THIS_DIR}/data" mkdir -p "${THIS_DIR}/registry" trap sigint_handler SIGTERM trap sigint_handler SIGINT cd "${THIS_DIR}" icegridregistry --Ice.Config=config.registry & sleep 1 icegridnode --Ice.Config=config.node & sleep 1 icegridadmin --Ice.Config=config.registry,config.node -e "application add 'application.xml'" & wait } function sigint_handler { send_signal "SIGTERM" "$(jobs -p)" wait rm -rf "${THIS_DIR}/log" rm -rf "${THIS_DIR}/db" rm -rf "${THIS_DIR}/data" rm -rf "${THIS_DIR}/registry" } function send_signal { local signal="${1}" local pids=(${2}) local pid for pid in "${pids[@]}"; do signal_children "${signal}" "${pid}" if ps -p ${pid} > /dev/null; then echo "Sending ${signal} to ($(ps -p ${pid} -o cmd=))." kill -s ${signal} ${pid} fi done } function signal_children { local signal="${1}" local pid="${2}" if pgrep -P ${pid} > /dev/null; then send_signal "${signal}" "$(pgrep -P ${pid})" fi } if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then main "$@" fi