mirror of
https://github.com/paulusmack/ppp.git
synced 2024-11-23 18:33:24 +08:00
67811a647d
poff could kill other pppd processes when there are many pppd running on different serial port. Signed-off-by: Ming Dai <radaiming@gmail.com>
105 lines
2.7 KiB
Bash
105 lines
2.7 KiB
Bash
#!/bin/sh
|
|
|
|
# $Id: poff,v 1.1 2002/11/24 23:30:44 etbe Exp $
|
|
# Written by John Hasler <john@dhh.gt.org> and based on work
|
|
# by Phil Hands <phil@hands.com>. Distributed under the GNU GPL
|
|
|
|
if [ -x /usr/bin/kill ]; then
|
|
KILL="/usr/bin/kill"
|
|
else
|
|
KILL="/bin/kill"
|
|
fi
|
|
SIG=TERM
|
|
DONE="stopped"
|
|
MODE=""
|
|
|
|
usage ()
|
|
{
|
|
cat <<!EOF!
|
|
usage: $0 [option] [provider]
|
|
options:
|
|
-r Cause pppd to drop the line and redial.
|
|
-d Toggle the state of pppd's debug option.
|
|
-c Cause pppd to renegotiate compression.
|
|
-a Stop all pppd's. 'provider' will be ignored.
|
|
-h Print this help summary and exit.
|
|
-v Print version and exit.
|
|
none Stop pppd.
|
|
|
|
Options may not be combined.
|
|
|
|
If 'provider' is omitted pppd will be stopped or signalled if and only if
|
|
there is exactly one running unless the '-a' option was given. If
|
|
'provider' is supplied the pppd controlling the connection to that
|
|
provider will be stopped or signalled.
|
|
!EOF!
|
|
}
|
|
|
|
# Get option. If there are none replace the "?" that getopts puts in
|
|
# FLAG on error with "null".
|
|
getopts rdcavh FLAG
|
|
if [ "$?" -ne 0 ]; then
|
|
FLAG="null"
|
|
fi
|
|
|
|
# Check for additional options. Should be none.
|
|
getopts :rdcavh DUMMY
|
|
if [ "$?" -eq 0 ]; then
|
|
echo "$0: Illegal option -- ${OPTARG}."
|
|
exit 1
|
|
fi
|
|
|
|
case $FLAG in
|
|
"r") SIG=HUP; DONE=signalled; shift ;;
|
|
"d") SIG=USR1; DONE=signalled; shift ;;
|
|
"c") SIG=USR2; DONE=signalled; shift ;;
|
|
"a") MODE="all"; shift ;;
|
|
"v") echo "$0$Revision: 1.1 $_TrickToPrint_RCS_Revision"; exit 0 ;;
|
|
"h") usage; exit 0 ;;
|
|
"?") exit 1;
|
|
esac
|
|
|
|
# Get the PIDs of all the pppds running. Could also get these from
|
|
# /var/run, but pppd doesn't create .pid files until ppp is up.
|
|
PIDS=`pidof pppd`
|
|
|
|
# poff is pointless if pppd isn't running.
|
|
if test -z "$PIDS"; then
|
|
echo "$0: No pppd is running. None ${DONE}."
|
|
exit 1
|
|
fi
|
|
|
|
# Find out how many pppd's are running.
|
|
N=`echo "$PIDS" | wc -w`
|
|
|
|
# If there are no arguments we can't do anything if there is more than one
|
|
# pppd running.
|
|
if test "$#" -eq 0 -a "$N" -gt 1 -a $FLAG != "a" ; then
|
|
echo "$0: More than one pppd running and no "-a" option and
|
|
no arguments supplied. Nothing ${DONE}."
|
|
exit 1
|
|
fi
|
|
|
|
# If either there are no arguments or '-a' was specified kill all the
|
|
# pppd's.
|
|
if test "$#" -eq 0 -o "$MODE" = "all" ; then
|
|
$KILL -$SIG $PIDS || {
|
|
echo "$0: $KILL failed. None ${DONE}."
|
|
exit 1
|
|
}
|
|
exit 0
|
|
fi
|
|
|
|
# There is an argument, so kill the pppd started on that provider.
|
|
PID=`ps axw | grep "[ /]pppd call $1" | grep -w "$1" | awk '{print $1}'`
|
|
if test -n "$PID" ; then
|
|
$KILL -$SIG $PID || {
|
|
echo "$0: $KILL failed. None ${DONE}."
|
|
exit 1
|
|
}
|
|
else
|
|
echo "$0: I could not find a pppd process for provider '$1'. None ${DONE}."
|
|
exit 1
|
|
fi
|
|
exit 0
|