/lib/lsb/init-functions
から次のコードの意味を理解する必要があります。
base=${1##*/}
また、pidofproc
関数が値をstatus_of_proc
に返す方法を説明できれば役に立ちます。
編集:
pidofproc
pidofproc () {
local pidfile base status specified pid OPTIND
pidfile=
specified=
OPTIND=1
while getopts p: opt ; do
case "$opt" in
p) pidfile="$OPTARG"
specified="specified"
;;
esac
done
shift $(($OPTIND - 1))
if [ $# -ne 1 ]; then
echo "$0: invalid arguments" >&2
return 4
fi
base=${1##*/}
if [ ! "$specified" ]; then
pidfile="/var/run/$base.pid"
fi
if [ -n "${pidfile:-}" -a -r "$pidfile" ]; then
read pid < "$pidfile"
if [ -n "${pid:-}" ]; then
if $(kill -0 "${pid:-}" 2> /dev/null); then
echo "$pid" || true
return 0
Elif ps "${pid:-}" >/dev/null 2>&1; then
echo "$pid" || true
return 0 # program is running, but not owned by this user
else
return 1 # program is dead and /var/run pid file exists
fi
fi
fi
if [ -n "$specified" ]; then
if [ -e "$pidfile" -a ! -r "$pidfile" ]; then
return 4 # pidfile exists, but unreadable, return unknown
else
return 3 # pidfile specified, but contains no PID to test
fi
fi
if [ -x /bin/pidof ]; then
status="0"
/bin/pidof -o %PPID -x $1 || status="$?"
if [ "$status" = 1 ]; then
return 3 # program is not running
fi
return 0
fi
return 4 # Unable to determine status
}
status_of_proc
status_of_proc () {
local pidfile daemon name status OPTIND
pidfile=
OPTIND=1
while getopts p: opt ; do
case "$opt" in
p) pidfile="$OPTARG";;
esac
done
shift $(($OPTIND - 1))
if [ -n "$pidfile" ]; then
pidfile="-p $pidfile"
fi
daemon="$1"
name="$2"
status="0"
pidofproc $pidfile $daemon >/dev/null || status="$?"
if [ "$status" = 0 ]; then
log_success_msg "$name is running"
return 0
Elif [ "$status" = 4 ]; then
log_failure_msg "could not access PID file for $name"
return $status
else
log_failure_msg "$name is not running"
return $status
fi
}
答えはここにあります:
status="0"
pidofproc $pidfile $daemon >/dev/null || status="$?"
したがって、status_of_proc
はpidofproc
を呼び出し、$base
を設定します。この変数値は現在のシェルで設定されているため、pidofproc
がstatus_of_proc
に戻ってもその値は保持されます。
例えば:
fn1() { unset var; fn2; echo "$var"; }
fn2() { var=set; }
fn1
set
次の[
test ]
command pidofproc
は、$pidfile
を評価し、その結果に基づいて戻ります。
[ -e "$pidfile" -a ! -r "$pidfile" ]
つまり、次のようになります。
if $pidfile exists and it is not readable
全文はこちらです:
if [ -e "$pidfile" -a ! -r "$pidfile" ]; then
return 4 # pidfile exists, but unreadable, return unknown
else
return 3 # pidfile specified, but contains no PID to test