| #!/bin/bash |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| |
| # qpid.stop Script |
| # |
| # Script checks for a given pid running PROGRAM and attempts to quit it |
| # |
| |
| MAX_ATTEMPTS=1 |
| SLEEP_DELAY=1 |
| PROGRAM="DQPID" |
| |
| |
| # |
| # Print what is going to be done |
| # |
| printActions() |
| { |
| #ps=`ps o command p $1|grep $PROGRAM` |
| ps=`ps -o args -p $1|grep $PROGRAM` |
| echo "Attempting to kill: $ps" |
| } |
| |
| # |
| # Forcably Quit the specified PID($1) |
| # |
| forceQuit() |
| { |
| kill -9 $1 |
| } |
| |
| |
| # |
| # Gracefully ask the PID($1) to quit |
| # |
| quit() |
| { |
| kill $1 |
| } |
| |
| # |
| # Grep the ps log for the PID ($1) to ensure that it has quit |
| # |
| lookup() |
| { |
| result=`ps -o args -p $1 |grep -v grep |grep $PROGRAM |wc -l` |
| } |
| |
| # |
| # Sleep and then check then lookup the PID($1) to ensure it has quit |
| # |
| check() |
| { |
| echo "Waiting $SLEEP_DELAY second for $1 to exit" |
| sleep $SLEEP_DELAY |
| lookup $1 |
| } |
| |
| |
| |
| # |
| # Verify the PID($1) is available |
| # |
| verifyPid() |
| { |
| lookup $1 |
| if [[ $[$result] == 1 ]] ; then |
| brokerspid=$1 |
| else |
| echo "Unable to locate Qpid Process with PID $1" |
| exit -1 |
| fi |
| } |
| |
| # |
| # Main Run |
| # |
| |
| # Check if we are killing all qpid pids or just one. |
| if [[ $# == 0 ]] ; then |
| echo "Killing All Qpid Brokers for user: '$USER'" |
| qpid.stopall |
| exit $? |
| else |
| verifyPid $1 |
| fi |
| |
| printActions $brokerspid |
| |
| # Attempt to quit the process MAX_ATTEMPTS Times |
| attempt=0 |
| while [[ $[$result] > 0 && $[$attempt] < $[$MAX_ATTEMPTS] ]] ; do |
| quit $brokerspid |
| check $brokerspid |
| attempt=$[$attempt + 1] |
| done |
| |
| # Check that it has quit |
| if [[ $[$result] == 0 ]] ; then |
| echo "Process quit" |
| exit 0 |
| else |
| |
| # Now attempt to force quit the process |
| attempt=0 |
| while [[ $[$result] > 0 && $[$attempt] < $[$MAX_ATTEMPTS] ]] ; do |
| forceQuit $brokerspid |
| check $brokerspid |
| attempt=$[$attempt + 1] |
| done |
| |
| |
| # Output final status |
| if [[ $[$result] > 0 && $[$attempt] == $[$MAX_ATTEMPTS] ]] ; then |
| echo "Stopped trying to kill process: $brokerspid" |
| echo "Attempted to stop $attempt times" |
| else |
| echo "Done " |
| fi |
| fi |