[Feature][YUKUAI_patch]add 18.02 code

Only Configure: No
Affected branch: master
Affected module: unknow
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: No

Change-Id: I7f71153004f10fc0ea5adfa083866aaeeb1053ac
diff --git a/rootfs/etc/lib/lsb/init-functions-2 b/rootfs/etc/lib/lsb/init-functions-2
new file mode 100755
index 0000000..40513ab
--- /dev/null
+++ b/rootfs/etc/lib/lsb/init-functions-2
@@ -0,0 +1,502 @@
+# -*-Shell-script-*-
+#
+# functions This file contains functions to be used by most or all  # ×¢ÊÍ £º¸Ã½Å±¾¼¸ºõ±» /etc/init.d/ ϵÄËùÓнű¾Ëùµ÷Óã¬ÒòΪËü°üº¬ÁË´óÁ¿µÄ
+#  shell scripts in the /etc/init.d directory.        # µÄ»ù´¡º¯Êý¡£Í¬Ê±Ò²±» /etc/rc.d/rc.sysinit £¬ÀýÈç success¡¢action¡¢failure µÈº¯Êý
+#
+ 
+TEXTDOMAIN=initscripts    # ÉèÖà TEXTDOMAIN ±äÁ¿
+ 
+ 
+##########################################################################################################################################################
+# Make sure umask is sane     # È·±£ root Óû§µÄ umask ÊÇÕýÈ·µÄ 022 £¨Ò²¾ÍÊÇ rwxr-xr-x£©
+umask 022
+ 
+# Set up a default search path.           # ÉèÖÃĬÈ쵀 PATH ±äÁ¿
+PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"  # ĬÈÏΪ /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
+export PATH         # µ¼³öΪ»·¾³±äÁ¿
+ 
+# Get a sane screen width    # ÉèÖÃÕýÈ·µÄÆÁÄ»¿í¶È
+[ -z "${COLUMNS:-}" ] && COLUMNS=80     # Èç¹û COLUMNS ±äÁ¿µÄֵΪ¿Õ£¬ÔòÉèÖÃΪ 80 £¨ÁУ©
+ 
+[ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE="`/sbin/consoletype`"    # Èç¹û CONSOLETYPE Ϊ¿ÕÔòÉèÖà CONSOLETYPE Ϊ /sbin/consoletype ÃüÁî·µ»ØµÄÖµ
+                                                                                                             # Ò»°ãÊÇ vt »òÕß pty ¡¢serial
+##########################################################################################################################################################
+if [ -f /etc/sysconfig/i18n -a -z "${NOLOCALE:-}" ] ; then      # Èç¹û´æÔÚ /etc/sysconfig/i18n ÇÒ NOLOCALE ±äÁ¿µÄֵΪ¿Õ£¬Ôò
+      . /etc/sysconfig/i18n       # Ö´ÐÐ /etc/sysconfig/i18n Îļþ£¬È¡µÃ LANG ±äÁ¿µÄÖµ
+      if [ "$CONSOLETYPE" != "pty" ]; then        # Èç¹ûµ±Ç° console ÀàÐͲ»ÊÇ pty£¨Ô¶³ÌµÇ¼£©£¬¶øÊÇ vt »òÕß serial £¬Ôò
+          case "${LANG:-}" in                                                                                                    # ¸ù¾Ý LANG µÄÖµ×÷³öÑ¡Ôñ
+              ja_JP*|ko_KR*|zh_CN*|zh_TW*|bn_*|bd_*|pa_*|hi_*|ta_*|gu_*)    # Èç¹û LANG ÊÇ ÈÕÎÄ¡¢ÖÐÎļòÌå¡¢ÖÐÎÄ·±Ìå¡¢º«Îĵȣ¬Ôò
+                   export LC_MESSAGES=en_US                                                                                                # °Ñ LC_MESSAGES ÉèÖÃΪ en_US
+                   export LANG                                                                                                                       # ͬʱµ¼³öΪ»·¾³±äÁ¿
+                   ;;
+              *)
+                   export LANG                                                                                                                # Èç¹ûÊÇÆäËûÀàÐ͵ÄÓïÑÔ£¬ÔòÖ±½Óµ¼³ö LANG
+               ;    ;
+         esac
+      else                                                                                                                    # Èç¹ûµ±Ç° consle ÊÇ pty                                                   
+       [ -n "$LC_MESSAGES" ] && export LC_MESSAGES        # ÇÒÈç¹û LC_MESSAGES ²»Îª¿Õ£¬ÔòÖ±½Óµ¼³ö LC_MESSAGES 
+       export LANG
+  fi
+fi
+##########################################################################################################################################################
+ 
+# ÏÂÃæÊÇÉèÖà success¡¢failure¡¢passed¡¢warning 4ÖÖÇé¿öϵÄ×ÖÌåÑÕÉ«µÄ
+ 
+# Read in our configuration
+if [ -z "${BOOTUP:-}" ]; then      # Ê×ÏÈÈç¹û BOOTUP ±äÁ¿Îª¿Õ£¬Ôò
+  if [ -f /etc/sysconfig/init ]; then       # Èç¹û´æÔÚ /etc/sysconfig/init Îļþ£¬Ö´ÐÐ /etc/sysconfig/init Îļþ
+      . /etc/sysconfig/init
+  else                 # ·ñÔòÎÒÃǾÍÊÖ¹¤ÉèÖÃ
+    # This all seem confusing? Look in /etc/sysconfig/init,
+    # or in /usr/doc/initscripts-*/sysconfig.txt
+    BOOTUP=color           # µÚÒ»ÉèÖà BOOTUP ±äÁ¿£¬Ä¬ÈϾÍÊÇ color 
+    RES_COL=60             # µÚ¶þÉèÖÃÉèÖÃÔÚÆÁÄ»µÄµÚ¼¸ÁÐÊä³öºóÃæµÄ "[ xxx ]" £¬Ä¬ÈÏÊǵÚ60ÁÐ
+    MOVE_TO_COL="echo -en //033[${RES_COL}G"      # MOVE_TO_COL ÊÇÓÃÓÚ´òÓ¡ "OK" »òÕß "FAILED" ,»òÕß "PASSED" ,»òÕß "WARNING" ֮ǰµÄ²¿·Ö£¬²»º¬ "[" 
+    SETCOLOR_SUCCESS="echo -en //033[1;32m"       # SETCOLOR_SUCCESS ÉèÖúóÃæµÄ×ÖÌ嶼ΪÂÌÉ«
+    SETCOLOR_FAILURE="echo -en //033[1;31m"       # SETCOLOR_FAILURE ÉèÖúóÃæ½«ÒªÊä³öµÄ×ÖÌ嶼ΪºìÉ«
+    SETCOLOR_WARNING="echo -en //033[1;33m"       # SETCOLOR_WARNING ÉèÖúóÃæ½«ÒªÊä³öµÄ×ÖÌ嶼Ϊ¡Á¡Á¡Á
+    SETCOLOR_NORMAL="echo -en //033[0;39m"        # SETCOLOR_NORMAL ÉèÖúóÃæÊä³öµÄ×ÖÌ嶼Ϊ°×É«£¨Ä¬ÈÏ£©
+    LOGLEVEL=1
+  fi
+  if [ "$CONSOLETYPE" = "serial" ]; then    # Èç¹ûÊÇͨ¹ý´®¿ÚµÇ¼µÄ£¬ÔòÈ«²¿È¡Ïû²ÊÉ«Êä³ö
+      BOOTUP=serial
+      MOVE_TO_COL=
+      SETCOLOR_SUCCESS=
+      SETCOLOR_FAILURE=
+      SETCOLOR_WARNING=
+      SETCOLOR_NORMAL=
+  fi
+fi
+ 
+ 
+##########################################################################################################################################################
+if [ "${BOOTUP:-}" != "verbose" ]; then    # Èç¹û BOOTUP ±äÁ¿µÄÖµ²»Îª verbose £¬Ôò
+   INITLOG_ARGS="-q"                       # °Ñ INITLOG_ARGS µÄÖµÉèÖÃΪ -q £¨°²¾²Ä£Ê½£©
+else                                       # ·ñÔò
+   INITLOG_ARGS=                           # °Ñ INITLOG_ARGS µÄÖµÇë¿Õ 
+fi
+##########################################################################################################################################################
+# Check if $pid (could be plural) are running            # ÏÂÃæ¶¨ÒåÒ»¸öº¯Êý checkpid £¨£©£¬Ä¿µÄÊǼì²é /proc ÏÂÊÇ·ñ´æÔÚÖ¸¶¨µÄĿ¼£¨ÀýÈç /proc/1/£©
+checkpid() {         # Èç¹ûÓÐÈÎÒâÒ»¸ö´æÔÚ£¬Ôò·µ»Ø0£»
+ local i
+ 
+ for i in $* ; do
+  [ -d "/proc/$i" ] && return 0
+ done
+ return 1                 # Èç¹û¸ø³öµÄ²ÎÊýÈ«²¿²»´æÔÚ¶ÔÓ¦µÄĿ¼£¬Ôò·µ»Ø1
+}
+ 
+##########################################################################################################################################################
+# A function to start a program.     # ÏÂÃæ¶¨Òå×îÖØÒªµÄÒ»¸öº¯Êý£¬daemon º¯Êý£¬ËüµÄ×÷ÓÃÊÇÆô¶¯Ä³Ïî·þÎñ¡£/etc/init.d/ ϵĽű¾µÄ start ²¿·Ö¶¼»áÓõ½Ëü
+daemon() {
+ # Test syntax.
+ local gotbase= force=
+ local base= user= nice= bg= pid=
+ nicelevel=0
+ while [ "$1" != "${1##[-+]}" ]; do       # daemon º¯Êý±¾Éí¿ÉÒÔÖ¸¶¨¶à¸öÑ¡ÏÀýÈç --check <value> £¬--check=<value> £¬
+   case $1 in
+     '')    echo $"$0: Usage: daemon [nicelevel] {program}"    # Ò²¿ÉÒÔÖ¸¶¨ nice Öµ
+            return 1;;
+     --check)
+     base=$2
+     gotbase="yes"
+     shift 2
+     ;;
+     --check=?*)
+         base=${1#--check=}
+     gotbase="yes"
+     shift
+     ;;
+     --user)               # Ò²¿ÉÒÔÖ¸¶¨ÒªÒÔʲôÓû§Éí·ÝÔËÐУ¨--user <usr> , --user=<usr>)
+     user=$2
+     shift 2
+     ;;
+     --user=?*)
+            user=${1#--user=}
+     shift
+     ;;
+     --force)
+         force="force"        # --force ±íÊ¾Ç¿ÖÆÔËÐÐ
+     shift
+     ;;
+     [-+][0-9]*)
+         nice="nice -n $1"      # Èç¹û daemon µÄµÚÒ»¸ö²ÎÊýÊÇÊý×Ö£¬ÔòÈÏΪÊÇ nice Öµ
+            shift
+     ;;
+     *)     echo $"$0: Usage: daemon [nicelevel] {program}"
+            return 1;;
+   esac
+ done
+ 
+        # Save basename.      # basename ¾ÍÊÇ´Ó·þÎñÆ÷µÄ¶þ½øÖƳÌÐòµÄ full path ÖÐÈ¡³ö×îºóµÄ²¿·Ö
+        [ -z "$gotbase" ] && base=${1##*/}                                        
+ 
+        # See if it's already running. Look *only* at the pid file.    # ¼ì²é¸Ã·þÎñÊÇ·ñÒѾ­ÔÚÔËÐС£²»¹ý daemon º¯ÊýÖ»²é¿´ pid Îļþ¶øÒÑ
+ if [ -f /var/run/${base}.pid ]; then              # Èç¹û /var/run Ï´æÔڸ÷þÎñµÄ pid Îļþ£¬Ôò
+  local line p
+  read line < /var/run/${base}.pid          # ´Ó¸Ã pid Îļþÿ´Î¶ÁȡһÐУ¬Ë͸ø±äÁ¿ line ¡£×¢Òâ pid Îļþ¿ÉÄÜÓжàÐУ¬ÇÒ²»Ò»¶¨¶¼ÊÇÊý×Ö
+  for p in $line ; do                       # ¶ÔÓÚ line ±äÁ¿µÄÿ¸ö word ½øÐмì²é
+   [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"      # Èç¹û p È«²¿ÊÇÊý×Ö£¬ÇÒ´æÔÚ /proc/$p/ Ŀ¼£¬ÔòÈÏΪ¸ÃÊý×ÖÊÇÒ»¸ö pid £¬°ÑËü¼ÓÈëµ½ pid ±äÁ¿
+  done       # µ½×îºó pid ±äÁ¿µÄÖµ¿ÉÄÜÊÇÓжà¸öÓɿոñ·Ö¸ôµÄÊý×Ö×é³É
+ fi
+ 
+ [ -n "${pid:-}" -a -z "${force:-}" ] && return     # Èç¹û pid ±äÁ¿×îÖÕΪ¿Õ£¬Ôò force ±äÁ¿Îª¿Õ£¨²»Ç¿ÖÆÆô¶¯£©£¬Ôò·µ»Ø
+ 
+ # make sure it doesn't core dump anywhere unless requested        # ÏÂÃæ¶Ô¸Ã·þÎñʹÓõÄ×ÊÔ´×÷һЩÉèÖÃ
+ ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0} >/dev/null 2>&1          # ulimit ÊÇ¿ØÖÆÓɸà shell Æô¶¯µÄ½ø³ÌÄܹ»Ê¹ÓõÄ×ÊÔ´£¬-S ÊÇ soft control µÄÒâ˼£¬-c ÊÇÖ¸×î´óµÄ core   
+                                                                 # dump Îļþ´óС£¬Èç¹û DEAMON_COREFILE_LIMIT Ϊ¿Õ£¬ÔòĬÈÏΪ 0
+ 
+ # if they set NICELEVEL in /etc/sysconfig/foo, honor it         # Èç¹û´æÔÚ /etc/sysconfi/foo Îļþ£¬ÇÒÆäÖÐÓÐ NICELEVEL ±äÁ¿ÔòÓÃËü´úÌæ  daemon ºóÃæµÄÄǸö nice Öµ
+ [ -n "$NICELEVEL" ] && nice="nice -n $NICELEVEL"                # ×¢Ò⣬ÕâÀïµÄ nice ¸³ÖµÊÇÓà nice -n <value> µÄ¸ñʽ£¬ÒòΪ nice ±¾Éí¿ÉÒÔÆô¶¯ÃüÁÓÃÕâ¸ö¸ñʽ½Ï·½±ã
+ 
+ # Echo daemon                                                   # Èç¹û BOOTUP µÄֵΪ verbose £¬Ôò´òÓ¡Ò»¸ö·þÎñÃû
+        [ "${BOOTUP:-}" = "verbose" -a -z "$LSB" ] && echo -n " $base"
+ 
+ # And start it up.                                                                                        # ÏÂÃæÊÇ¿ªÊ¼Æô¶¯ËüÁË
+ if [ -z "$user" ]; then                                                                                  # Èç¹û user ±äÁ¿Îª¿Õ£¬ÔòĬÈÏʹÓà root Æô¶¯Ëü
+    $nice initlog $INITLOG_ARGS -c "$*"                                                                # Ö´ÐÐ nice -n <nice_value> initlog -q -c "$*" 
+ else                                                                                                         # Èç¹ûÖ¸¶¨ÁËÓû§£¬Ôò
+    $nice initlog $INITLOG_ARGS -c "runuser -s /bin/bash - $user -c /"$*/""                # Ö´ÐÐ nice -n <nice_value> initlog -q -c "runuser -s /bin/bash - <user> -c "$*"
+ fi
+ [ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup"                # Èç¹ûÉÏÃæµÄÃüÁî³É¹¦£¬ÔòÏÔʾһ¸öÂÌÉ«µÄ [ OK ] £¬·ñÔòÏÔʾ [ FAILURE ]
+}
+ 
+ 
+##########################################################################################################################################################
+ 
+# A function to stop a program.                                # ÏÂÃæ¶¨ÒåÁíÍâÒ»¸öºÜÖØÒªµÄº¯Êý killproc £¬/etc/init.d/ ÏÂÃæµÄ½Å±¾µÄ stop ²¿·Ö¶¼»áÓõ½Ëü
+killproc() {
+ RC=0                                                                    # RC ÊÇ×îÖÕ·µ»ØµÄÖµ£¬³õʼ»¯Îª 0
+ # Test syntax.
+ if [ "$#" -eq 0 ]; then                                            # killproc º¯ÊýµÄÓï·¨¸ñʽÊÇ killproc <service> [<signal>] £¬ÀýÈç killproc sm-client 9
+  echo $"Usage: killproc {program} [signal]"              
+  return 1
+ fi
+ 
+ notset=0                                                             # noset ÊÇÓÃÓÚ¼ì²éÓû§ÊÇ·ñÖ¸¶¨ÁË kill ҪʹÓõÄÐźÅ
+ # check for second arg to be kill level                  
+ if [ -n "$2" ]; then                                                # Èç¹û $2 ²»Îª¿Õ£¬Ôò±íʾÓû§ÓÐÉ趨Ðźţ¬Ôò
+  killlevel=$2                                                            # °Ñ $2 µÄÖµ¸³Óè killlevel ±äÁ¿
+ else                                                                    # ·ñÔò
+  notset=1                                                                # notset ±äÁ¿µÄֵΪ1£¬Í¬Ê± killlevel Ϊ '-9' £¨KILL Ðźţ©
+  killlevel="-9"
+ fi
+ 
+# ²¹³ä £º×¢Ò⣬²¢²»ÊÇ˵Óû§Ã»ÓÐÖ¸¶¨ÐźŵØÍ£Ö¹Ä³Ïî·þÎñʱ£¬¾Í»áÁ¢¼´Óà kill -9 ÕâÑùµÄ·½Ê½Ç¿ÖÆÉ±ËÀ£¬¶øÊÇÏÈÓà TERM Ðźţ¬È»ºóÔÙÓà KILL
+ 
+        # Save basename.
+        base=${1##*/}                                                # basename ¾ÍÊǵóö·þÎñµÄÃû³Æ
+ 
+        # Find pid.
+ pid=                                                                    # °Ñ pid ±äÁ¿µÄÖµÇå¿Õ¡£×¢Ò⣬²»ÊÇÖ¸ pid ±äÁ¿µÄÖµµÈÓÚÏÂÃæ½Å±¾µÄÖ´Ðнá¹û£¬Òª¿´Çå³þ
+ if [ -f /var/run/${base}.pid ]; then                         # ÏÂÃæºÍÉÏÃæµÄ daemon º¯ÊýÒ»ÑùÕÒ³ö pid 
+    local line p
+    read line < /var/run/${base}.pid
+    for p in $line ; do
+       [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"
+    done
+ fi
+ if [ -z "$pid" ]; then                                                # ²»¹ýºÍ daemon ²»Í¬µÄÊÇ£¬Ò»µ© pid Ϊ¿Õ²»»áÖ±½Ó return ¶øÊdz¢ÊÔÓà pid ÃüÁîÔٴβéÕÒ
+  pid=`pidof -o $$ -o $PPID -o %PPID -x $1 || /            # -o ÊÇÓÃÓÚºöÂÔij¸ö pid £¬-o $$ ÊǺöÂÔµ±Ç° shell µÄ pid¡¢-o $PPID ÊǺöÂÔ shell µÄ pid 
+   pidof -o $$ -o $PPID -o %PPID -x $base`                   # -o %PPID ÊǺöÂÔ pidof ÃüÁîµÄ¸¸½ø³Ì£¬Òª²éѯµÄ½ø³ÌÊÇ $1 (fullpath) »òÕß $base 
+ fi
+ 
+ # Kill it.                                                            
+  if [ -n "${pid:-}" ] ; then                                        # Èç¹û pid µÄÖµ×îÖÕ²»Îª¿Õ£¬Ôò
+    [ "$BOOTUP" = "verbose" -a -z "$LSB" ] && echo -n "$base "    # ÇÒ BOOTUP µÄֵΪ verbose £¬ÇÒ LSB ±äÁ¿²»Îª¿Õ£¬Ôò´òÓ¡Ò»¸ö·þÎñÃû
+    if [ "$notset" -eq "1" ] ; then                                        # Èç¹û notset ±äÁ¿²»Îª1£¬±íʾÓû§Ã»ÓÐÖ¸¶¨Ðźţ¬Ôò
+         if checkpid $pid 2>&1; then                                        # µ÷Óà checkpid  $pid ¼ì²éÊÇ·ñÔÚ /proc/ Ï´æÔÚ½ø³ÌĿ¼£¬Èç¹ûÓÐ
+              # TERM first, then KILL if not dead                            # Ïȳ¢ÊÔÓà TERM ÐÅÏ¢£¬²»ÐÐÔÙÓà KILL ÐźÅ
+              kill -TERM $pid >/dev/null 2>&1                                # Ö´ÐÐ kill -TERM $pid 
+              usleep 100000                                                          # usleep ºÍ sleep Ò»Ñù£¬²»¹ýµ¥Î»ÊǰÙÍò·ÖÖ®1Ãë¡£ÕâÀïÐÝÃß1Ãë
+              if checkpid $pid && sleep 1 &&                                # Èç¹û checkpid $pid »¹ÊDz鵽ÓÐ /proc/<pid>/ Ŀ¼´æÔÚ£¬Ôò±íʾ»¹Ã»ÓÐɱËÀ£¬¼ÌÐøµÈ´ý1Ãë
+                 checkpid $pid && sleep 3 &&                                # Èç¹û1ÃëºóÓà checkpid ¼ì²é»¹ÊÇÓУ¬ÔòÔٵȴý3Ã룻
+                 checkpid $pid ; then                                            # Èç¹û»¹ÊÇûÓÐɱËÀ£¬ÔòÓà KILL ÐźÅ
+                        kill -KILL $pid >/dev/null 2>&1                            # Ö´ÐÐ kill -KILL ɱËÀËü
+                        usleep 100000                                                    # µÈ´ý1ÃëÖÖ
+              fi
+    fi
+    checkpid $pid                                                             # Ôٴμì²é pid Ŀ¼       
+    RC=$?                                                                         # ²¢°Ñ½á¹û·µ»Ø¸ø RC £¬Õâ¾ÍËãÊÇ killproc µÄ×îºó״̬ÁË
+    [ "$RC" -eq 0 ] && failure $"$base shutdown" || success $"$base shutdown"    # Èç¹û RC µÄֵΪ0£¬Ôò±íʾkill -9 ûÓÐɱËÀÁ˽ø³Ì£¬Ôòµ÷Óà failure º¯Êý£¬·ñÔòµ÷Óà success 
+    RC=$((! $RC))
+  
+    # use specified level only                                            # ÉÏÃæ¶¼ÊÇÔÚûÓÐÖ¸¶¨ÐźŵÄÇé¿öµÄ£¬ÏÂÃæÊÇÓû§Ö¸¶¨ÁËÐźŵġ£ÀýÈç restart£©»òÕß reload£©²¿·Ö
+    else    # Õâ¸ö else ÊÇÕë¶Ô if [ "$notset" -eq "1" ]  µÄ
+       if checkpid $pid; then                                             # Èç¹û¼ì²éµ½½ø³Ì´æÔÚ£¬Ôò
+            kill $killlevel $pid >/dev/null 2>&1                            # Ö´ÐÐkillÃüÁµ«Ê¹ÓÃÖ¸¶¨µÄÐźŠ$killlevel 
+            RC=$?                                                                     # ²¢°Ñ״ֵ̬·µ»Ø¸ø±äÁ¿ RC
+            [ "$RC" -eq 0 ] && success $"$base $killlevel" || failure $"$base $killlevel"    # Èç¹û RC Ϊ0Ôò±íʾ³É¹¦£¬µ÷Óà success£»·ñÔòµ÷Óà failure º¯Êý
+       fi
+  fi
+ else      # Õâ¸ö else ÊÇÕë¶Ô if [ -n "${pid:-}" ]  µÄ£¬Ò²¾ÍÊÇ˵ûÓÐ pid Îļþ£¬pidof ÃüÁîҲûÓÐÕÒµ½ pid £¬Ôò
+     failure $"$base shutdown"                # µ÷Óà failure º¯Êý£¬±íʾֹͣ·þÎñʧ°Ü
+     RC=1                                             # ͬʱ RC µÄֵΪ1
+ fi
+ 
+ # Remove pid file if any.                    # ¸ù¾Ý¾ßÌåÇé¿ö¿ÉÄÜÐèҪɾ³ý pid Îļþ
+ if [ "$notset" = "1" ]; then                    # Èç¹û notset ²»Îª1 £¬Ò²¾ÍÊÇÓû§Ã»ÓÐÖ¸¶¨ÐźŵÄÇé¿ö
+            rm -f /var/run/$base.pid            # ×Ô¶¯É¾³ý /var/run Ï嵀 pid Îļþ
+ fi
+ return $RC                                        # ²¢°Ñ RC ×÷Ϊ exit status ·µ»Ø
+}
+ 
+# ²¹³ä £º×ÔËùÒÔɾ³ý pid ÎļþÖ»Õë¶Ô notset Ϊ1 µÄÇé¿ö£¬ÊÇÒòΪ -HUP Ðźţ¨ÖضÁÅäÖã©£¬²¢²»É±ËÀ½ø³Ì£¬ËùÒÔ²»ÄÜɾ³ýËüµÄ pid Îļþ
+ 
+# ÀýÈçÏÂÃæ £º
+ 
+[root@mail init.d]# ps -ef |grep xinetd
+root      2635     1  0 12:25 ?        00:00:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
+[root@mail init.d]# ./xinetd reload
+Reloading configuration:                                   [  OK  ]
+[root@mail init.d]# ps -ef |grep xinetd
+root      2635     1  0 12:25 ?        00:00:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
+root      3927  3412  0 16:43 pts/0    00:00:00 grep xinetd
+[root@mail init.d]#
+ 
+¿ÉÒÔ¿´µ½ pid ÔÚ reload ºó²¢Ã»Óбä
+ 
+##########################################################################################################################################################
+# A function to find the pid of a program. Looks *only* at the pidfile        # ÏÂÃæµÄ pidfileofproc º¯ÊýºÍ checkpid ÀàËÆ£¬µ«²»Ö´ÐÐ pidof ÃüÁֻ²éѯ pid Îļþ
+pidfileofproc() {
+ local base=${1##*/}
+ 
+ # Test syntax.
+ if [ "$#" = 0 ] ; then
+  echo $"Usage: pidfileofproc {program}"
+  return 1
+ fi
+ 
+ # First try "/var/run/*.pid" files
+ if [ -f /var/run/$base.pid ] ; then
+         local line p pid=
+    read line < /var/run/$base.pid
+    for p in $line ; do
+         [ -z "${p//[0-9]/}" -a -d /proc/$p ] && pid="$pid $p"
+    done
+         if [ -n "$pid" ]; then
+                 echo $pid
+                 return 0
+         fi
+ fi
+}
+##########################################################################################################################################################
+# A function to find the pid of a program.                        # ÏÂÃæµÄ pidofproc º¯ÊýºÍÉÏÃæµÄ pidfileofproc º¯ÊýÀàËÆ£¬µ«¶àÁËÒ»²½ pidof ÃüÁî
+pidofproc() {
+ base=${1##*/}
+ 
+ # Test syntax.
+ if [ "$#" = 0 ]; then
+  echo $"Usage: pidofproc {program}"
+  return 1
+ fi
+ 
+ # First try "/var/run/*.pid" files
+ if [ -f /var/run/$base.pid ]; then
+         local line p pid=
+  read line < /var/run/$base.pid
+  for p in $line ; do
+         [ -z "${p//[0-9]/}" -a -d /proc/$p ] && pid="$pid $p"
+  done
+         if [ -n "$pid" ]; then
+                 echo $pid
+                 return 0
+         fi
+ fi
+ pidof -o $$ -o $PPID -o %PPID -x $1 || /
+  pidof -o $$ -o $PPID -o %PPID -x $base
+}
+##########################################################################################################################################################
+status() {                                                                  # ×¢ÊÍ £ºÏÂÃæµÄ status º¯ÊýÊÇÅжϷþÎñµÄ״̬£¬×ܹ²ÓÐ4ÖÖ
+ local base=${1##*/}
+ local pid
+ 
+ # Test syntax.
+ if [ "$#" = 0 ] ; then
+  echo $"Usage: status {program}"
+  return 1
+ fi
+ 
+ # First try "pidof"                                                        # ͬÑùÊDzéÕÒ pid ÏÈ¡£Ö±½ÓʹÓà pidof ÃüÁî
+ pid=`pidof -o $$ -o $PPID -o %PPID -x $1 || /                
+      pidof -o $$ -o $PPID -o %PPID -x ${base}`
+ if [ -n "$pid" ]; then                                                    # Èç¹û pid ±äÁ¿µÄÖµ²»Îª¿Õ£¬Ôò±íʾÕÒµ½½ø³Ì£¬
+         echo $"${base} (pid $pid) is running..."                 # Ôò´òÓ¡ "xxx (pid nnn) is running " ,
+         return 0                                                             # ²¢·µ»Ø 0
+ fi
+ 
+ # Next try "/var/run/*.pid" files                                    # Èç¹û pidof ÃüÁîûÓÐÕÒµ½£¬Ôò³¢ÊÔ´Ó pid ÎļþÕÒ
+ if [ -f /var/run/${base}.pid ] ; then
+         read pid < /var/run/${base}.pid
+         if [ -n "$pid" ]; then                                                # Èç¹û pidof ÃüÁîÕÒ²»µ½£¬µ«´Ó pid ÎļþÕÒµ½ÁË pid £¬Ôò
+                 echo $"${base} dead but pid file exists"                # ´òÓ¡ "xxx dead but pid file exists"£¬
+                 return 1                                                             # ²¢·µ»Ø 1
+         fi
+ fi
+ # See if /var/lock/subsys/${base} exists                            # Èç¹û pidof ÃüÁîºÍ pid Îļþ¶¼Ã»ÓÐÕÒµ½ pid £¬Ôò
+ if [ -f /var/lock/subsys/${base} ]; then                              # Èç¹ûÔÚ /var/lock/subsys Ï´æÔÚ¶ÔÓ¦µÄÎļþ£¬Ôò
+  echo $"${base} dead but subsys locked"                                # ´òÓ¡ ¡°xxxx dead but subsys locked¡±£¬
+  return 2                                                                            # ²¢·µ»Ø 2
+ fi
+ echo $"${base} is stopped"                                                # Èç¹û pidof ÃüÁî¡¢pidf Îļþ¶¼Ã»ÓÐÕÒµ½pid £¬ÇÒûÓбðËø£¬Ôò´òÓ¡ ¡°xxx is stopped¡±
+ return 3                                                                           # ²¢·µ»Ø3
+}
+##########################################################################################################################################################
+ 
+# ×¢ÊÍ £ºÏÂÃæµÄ echo_xxx º¯Êý¾ÍÊÇÕæÕýÔÚÆÁÄ»ÉÏ´òÓ¡ [ ok ] ¡¢[ PASSED ]¡¢[ FAILURE ]¡¢[ WARNING ] µÄ²¿·ÖÁË
+ 
+echo_success() {                                                                    # ÏÂÃæÊÇ echo_success ²¿·Ö
+  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL                            # Ê×ÏÈÊÇ´òÓ¡ ¡°[¡± ֮ǰµÄ¿Õ¸ñ
+  echo -n "[  "                                                                         # È»ºó´òÓ¡ "[" 
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS                    # ÉèÖÃ×ÖÌåΪºìÉ«
+  echo -n $"OK"                                                                       # ´òÓ¡ OK
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL                     # ·µ»Ø×ÖÌåΪ°×É«
+  echo -n "  ]"                                                                         # ´òÓ¡ "]"    
+  echo -ne "/r"                                                                        # »»ÐС£
+  return 0                                                                               # ·µ»Ø 0£¬ÆäËûÒ»ÂÉ·µ»Ø 1
+ 
+ 
+echo_failure() {
+  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+  echo -n "["
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
+  echo -n $"FAILED"
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+  echo -n "]"
+  echo -ne "/r"
+  return 1
+}
+ 
+echo_passed() {
+  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+  echo -n "["
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
+  echo -n $"PASSED"
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+  echo -n "]"
+  echo -ne "/r"
+  return 1
+}
+ 
+echo_warning() {
+  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+  echo -n "["
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
+  echo -n $"WARNING"
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+  echo -n "]"
+  echo -ne "/r"
+  return 1
+}
+##########################################################################################################################################################
+# Inform the graphical boot of our current state
+update_boot_stage() {
+  if [ "$GRAPHICAL" = "yes" -a -x /usr/bin/rhgb-client ]; then
+    /usr/bin/rhgb-client --update="$1"
+  fi
+  return 0
+}
+##########################################################################################################################################################
+# Log that something succeeded                                                
+success() {                                                                                                # success º¯Êý³ýÁË´òÓ¡ [ xxx ] Ö®Í⣬»¹»áʹÓà initlog ¼Ç¼ÐÅÏ¢
+  if [ -z "${IN_INITLOG:-}" ]; then
+     initlog $INITLOG_ARGS -n $0 -s "$1" -e 1                                                   # -n ÊÇ --name µÄÒâ˼£¬-s ÊÇ --string £¬-e ÊÇ --event £¬1 ±íʾÍêÈ«³É¹¦
+  else
+     # silly hack to avoid EPIPE killing rc.sysinit
+     trap "" SIGPIPE
+     echo "$INITLOG_ARGS -n $0 -s /"$1/" -e 1" >&21
+     trap - SIGPIPE
+  fi
+  [ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo_success
+  return 0
+}
+ 
+# Log that something failed
+failure() {
+  rc=$?
+  if [ -z "${IN_INITLOG:-}" ]; then
+     initlog $INITLOG_ARGS -n $0 -s "$1" -e 2                                                    # failure µÄ»° --event ÊÇ 2 ÊÇʧ°Ü
+  else
+     trap "" SIGPIPE
+     echo "$INITLOG_ARGS -n $0 -s /"$1/" -e 2" >&21
+     trap - SIGPIPE
+  fi
+  [ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo_failure
+  [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --details=yes
+  return $rc
+}
+ 
+# Log that something passed, but may have had errors. Useful for fsck
+passed() {
+  rc=$?
+  if [ -z "${IN_INITLOG:-}" ]; then
+     initlog $INITLOG_ARGS -n $0 -s "$1" -e 1                                                 # passed µÄ»° --event »¹ÊÇ1
+  else
+     trap "" SIGPIPE
+     echo "$INITLOG_ARGS -n $0 -s /"$1/" -e 1" >&21
+     trap - SIGPIPE
+  fi
+  [ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo_passed
+  return $rc
+} 
+ 
+# Log a warning
+warning() {
+  rc=$?
+  if [ -z "${IN_INITLOG:-}" ]; then
+     initlog $INITLOG_ARGS -n $0 -s "$1" -e 1                                                # warning µÄ»° --event Ò²ÊÇ 1
+  else
+     trap "" SIGPIPE
+     echo "$INITLOG_ARGS -n $0 -s /"$1/" -e 1" >&21
+     trap - SIGPIPE
+  fi
+  [ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo_warning
+  return $rc
+} 
+##########################################################################################################################################################
+# Run some action. Log its output.                                                        # action º¯ÊýÊÇÁíÍâÒ»¸ö×îÖØÒªµÄº¯Êý£¬ËüµÄ×÷ÓÃÊÇ´òӡij¸öÌáʾÐÅÏ¢²¢Ö´Ðиø¶¨ÃüÁî
+tion() {
+  STRING=$1
+  echo -n "$STRING "
+  if [ "${RHGB_STARTED}" != "" -a -w /etc/rhgb/temp/rhgb-console ]; then
+      echo -n "$STRING " > /etc/rhgb/temp/rhgb-console
+  fi
+  shift
+  initlog $INITLOG_ARGS -c "$*" && success $"$STRING" || failure $"$STRING"
+  rc=$?
+  echo
+  if [ "${RHGB_STARTED}" != "" -a -w /etc/rhgb/temp/rhgb-console ]; then
+      if [ "$rc" = "0" ]; then
+       echo_success > /etc/rhgb/temp/rhgb-console
+      else
+        echo_failed > /etc/rhgb/temp/rhgb-console
+ [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --details=yes
+      fi
+      echo
+  fi
+  return $rc
+}
+##########################################################################################################################################################
+# returns OK if $1 contains $2                        # strstr º¯ÊýÊÇÅÐ¶Ï $1 ×Ö·û´®ÊÇ·ñº¬ÓÐ $2 ×Ö·û´®£¬ÊÇÔò·µ»Ø0£¬·ñÔò·µ»Ø1
+() {
+  [ "${1#*$2*}" = "$1" ] && return 1
+  return 0
+}
+##########################################################################################################################################################
+# Confirm whether we really want to run this service                                       # confirm º¯ÊýÊÇÓÃÓÚ½»»¥Ê½µÄÆô¶¯·þÎñ
+nfirm() {
+  [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --details=yes
+  while : ; do 
+    echo -n $"Start service $1 (Y)es/(N)o/(C)ontinue? [Y] "                                   # »á´òÓ¡Ò»¸öÌáʾÐÅÏ¢
+    read answer
+    if strstr $"yY" "$answer" || [ "$answer" = "" ] ; then                                          # Èç¹û answer ±äÁ¿ÊÇ y »òÕß Y Ôò
+        return 0                                                                                                                # ·µ»Ø 0£¨µ«Î´ÕæÕýÆô¶¯£©
+    elif strstr $"cC" "$answer" ; then                                                                    # Èç¹û answer ÊÇ c »òÕß C £¬Ôò
+        rm -f /var/run/confirm                                                                                          # ɾ³ý /var/run/confirm Îļþ                           
+        [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --details=no
+        return 2                                                                                                                # ·µ»Ø2
+   elif strstr $"nN" "$answer" ; then                                                                      # Èç¹û answer ÊÇ n »òÕß N£¬Ôò
+  return 1                                                                                                                       # Ö±½Ó·µ»Ø1
+     fi
+  done
+}
\ No newline at end of file