unix init.d – ¿Cómo sabe killproc qué PID matar?

Pregunta:

Cuando miro mi /etc/rc.d/init.d/functions , veo lo siguiente debajo de mi función killproc() .

        if [ -n "${LSB:-}" -a -n "$killlevel" ]; then
                RC=7 # Program is not running
        else
                failure $"$base shutdown"
                RC=0
        fi

El problema es que tengo que configurar mi script /etc/init.d/<prog> para llamar con lo siguiente.

killproc -p /jail/var/run/prog.pid

En lugar de lo siguiente.

killproc prog

Cuando realizo un seguimiento a través de la función killproc() , me llevó a la declaración if anterior, siempre que no proporciono la opción -p <PID file> . ¿Alguien puede decirme qué hace esa declaración if, ya que no sé para qué sirve el LSB?

Respuesta:

killproc necesita la ruta completa del archivo del programa a matar, no solo el nombre del programa. Realiza una especie de búsqueda de diccionario y hace coincidir la ruta completa del programa con el PID para eliminar.

LSB son las siglas de Linux Standards Base . Está diseñado para ayudar a maximizar la interoperabilidad entre diferentes distribuciones. Sin embargo, CentOS ignora el LSB en algunos lugares, particularmente aquí (de acuerdo con el estándar, /etc/init.d/functions debe ubicarse en / lib y debe ofrecer una función start-daemon , entre otras cosas).

Mirando el código fuente de killproc , parece que, si no hay un archivo pid especificado, killproc busca a través de funciones en init.d, buscando una coincidencia con el nombre del programa especificado. Si no lo encuentra, pasará a la instrucción if a la que rastreó.

Si observa el crond inicio de crond (que está bastante bien escrito y es muy claro acerca de lo que está sucediendo), muestra la invocación adecuada de killproc

#note the full path to script 
 exec=/usr/sbin/crond
 stop() {
     if [ $UID -ne 0 ] ; then
         echo "User has insufficient privilege."
         exit 4
     fi
     echo -n $"Stopping $prog: "
     if [ -n "`pidfileofproc $exec`" ]; then
         killproc $exec
     RETVAL=3
     else
         failure $"Stopping $prog"
     fi
     retval=$?
     echo
     [ $retval -eq 0 ] && rm -f $lockfile
    }

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım