blob: 0c2dcdca3a7332af985e216cd9fe91f3aba14b50 [file] [log] [blame]
#!/bin/bash
#
# Copyright (c) 2013 Big Switch Networks, Inc.
#
# Licensed under the Eclipse Public License, Version 1.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.eclipse.org/legal/epl-v10.html
#
# 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.
usage() {
cat <<EOF >&2
$0 - kill process listening on a port, wait for it to terminate
Call syntax:
$0 -p <port> [OPTS]
OPTIONS:
-p <port> wait for port <port> to listen on
-t <time> wait <t> seconds for port to show up
-h this help
EOF
}
PROGNAME="$0"
SHORTOPTS="hp:t:"
ARGS=$(getopt $SHORTOPTS "$@" )
if [ $? -gt 0 ]; then
echo "Error getting options" >&2
exit 2
fi
timeout=15
eval set -- "$ARGS"
while true; do
case $1 in
-h)
usage
exit 0
;;
-p)
port="$2"
shift
;;
-t)
timeout="$2"
shift
;;
--)
shift
break
;;
-*)
echo "$0: error - unrecognized option $1" 1>&2
exit 1
;;
*)
break
;;
esac
shift
done
if [ ! "$port" ]; then
usage
exit 1
fi
for((i=0; i < 15; i++ )); do
if ! pid=$(lsof -t -iTCP:$port -sTCP:LISTEN); then
exit 0
fi
kill ${pid}
sleep 1
done
echo "Error: Program on port $pid failed to exit" >&2
exit 10