Como o killproc sabe o que o PID deve matar?

6

Quando olho meu /etc/rc.d/init.d/functions , vejo o seguinte na minha função killproc() .

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

O problema é que eu tenho que definir meu script /etc/init.d/<prog> para chamar com o seguinte.

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

Em vez do seguinte.

killproc prog

Quando eu rastreio a função killproc() , ela me trouxe para a instrução if acima, sempre que eu não forneço a opção -p <PID file> . Alguém pode me deixar saber o que se declaração faz como eu não sei o que o LSB é para.

    
por user192702 26.01.2014 / 07:37

1 resposta

6

killproc precisa do caminho completo do arquivo para o programa, e não apenas do nome do programa. Ele pré-forma um tipo de pesquisa de dicionário e corresponde ao caminho completo do programa para o PID para matar.

LSB significa Base de Padrões Linux . Ele foi projetado para ajudar a maximizar a interoperabilidade entre diferentes distros. No entanto, o CentOS ignora o LSB em alguns lugares, especialmente aqui (de acordo com o padrão, /etc/init.d/functions deve estar localizado em / lib e deve oferecer uma função start-daemon , entre outras coisas).

Examinando o código-fonte killproc , parece que, se não houver nenhum arquivo pid especificado, killproc pesquisará funções no init.d, procurando uma correspondência com o nome do programa especificado. Se não encontrar, cai na declaração if que você rastreou.

Se você olhar o script crond init (que é muito bem escrito e bem claro sobre o que está acontecendo), ele mostra a invocação apropriada 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
    }
    
por 29.07.2015 / 22:46

Tags