¿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?
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
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
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.
Respuestas:
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
o
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
killall
opkill
, dado que usan de forma predeterminada laSIGTERM
señ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), luegoSIGHUP
(1) y como último recursoSIGKILL
(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
pkill
ykillall
aceptan un parámetro de señal en el formulario-NAME
, como enfuente
markdoc serve &
ysvnserve -d
. Creo que es una especie de demonio, pero nada era seguro para mí :)killall
es el asesino!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:
o use el comando:
Recomiendo probar este script para mostrar que sus sistemas comenzaron y detuvieron demonios:
fuente
Verifique la
killproc
función disponible en el/etc/init.d/functions
script, obtenga el archivo y use la función. O usepgrep
ypkill
utilidades para verificar si están funcionando intencionalmente y luego úselos. Ejemplo:pkill -SIGTERM mysqld
enviarí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.fuente