¿Cómo matar a un demonio con su nombre con gracia?

16

Usualmente mato un proceso con killall.

killall markdoc

Pero no estoy seguro de si este comando finaliza el proceso con gracia. ¿Este comando logra una terminación elegante? Si no es así, ¿cómo puedo matar un proceso con su nombre con gracia?

Eonil
fuente
¿Su distribución tiene start-stop-daemon ?
manatwork
Estoy usando el servidor Ubuntu 10.04 LTS x64 . ¿Qué es ese demonio?
Eonil
Es una herramienta genérica para iniciar / detener demonios y administrar información relacionada, como archivos pid. Está presente en Ubuntu, vea su página de manual .
manatwork

Respuestas:

19

Tu pregunta no está clara, hablas de un demonio en el título, pero en el cuerpo solo hablas de un proceso genérico.

Para un demonio hay medios específicos para detenerlo, por ejemplo, en Debian tienes

    service daemon-name stop

o

    /etc/init.d/daemon-name stop

Existen sintaxis similares para otros estándares initscript utilizados en otras distribuciones / SO.

Para eliminar un proceso que no sea demonio, suponiendo que de alguna manera esté fuera de control, puede usar de forma segura killallo pkill, dado que usan de forma predeterminada la SIGTERMseñal (15), y cualquier aplicación escrita de manera correcta debería capturar y salir con gracia al recibir esta señal . Tenga en cuenta que estas utilidades podrían matar más de un proceso, si hay muchas con el mismo nombre.

Si eso no funciona, puede probar SIGINT(2), luego SIGHUP(1) y como último recurso SIGKILL(9). La aplicación no puede detectar esta última señal, por lo que no puede realizar ninguna limpieza. Por esta razón, debe evitarse cada vez que pueda.

Ambos pkilly killallaceptan un parámetro de señal en el formulario -NAME, como en

pkill -INT process-name
enzotib
fuente
Gracias. En realidad, mi pregunta original era sobre markdoc serve &y svnserve -d. Creo que es una especie de demonio, pero nada era seguro para mí :)
Eonil
killalles el asesino!
xdevs23
3

En BSD-like y otras distribuciones, a menudo tendrá scripts en /etc/rc.d/ que generalmente manejan el inicio, reinicio y detención de demonios en su sistema. Para detener un demonio, puede llamar a los scripts con la ruta absoluta, por ejemplo:

# /etc/rc.d/acpid stop

o use el comando:

# rc.d stop acpid

Recomiendo probar este script para mostrar que sus sistemas comenzaron y detuvieron demonios:

#!/bin/bash

chk_status(){
  target=$1
  if [[ $target != "functions" && $target !=  "functions.d" ]]
  then
    if [[ -f "/var/run/daemons/$target" ]]
     then
       stat="\e[1;32m[RUNNING]"
     else
       stat="\e[1;31m[STOPPED]"
     fi

    printf "$stat \t\e[1;34m$target\e[0;0m\n"
  fi
}

daemons=($(for daemon in /etc/rc.d/*; do echo "${daemon#\/etc\/rc.d\/}"; done))

if [[ $1 != "" ]]
then
 chk_status $1
else
 for d in "${daemons[@]}"; do
   chk_status $d
 done | sort
fi

fuente
0

Verifique la killprocfunción disponible en el /etc/init.d/functionsscript, obtenga el archivo y use la función. O use pgrepy pkillutilidades para verificar si están funcionando intencionalmente y luego úselos. Ejemplo: pkill -SIGTERM mysqldenviaría la señal de terminación de TERM para que mysqld realice un apagado seguro y vacíe las bases de datos en el disco, antes de ser asesinado.

Nikhil Mulley
fuente