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?
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?
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
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 killall
o pkill
, dado que usan de forma predeterminada la SIGTERM
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), 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 pkill
y killall
aceptan un parámetro de señal en el formulario -NAME
, como en
pkill -INT process-name
markdoc serve &
y svnserve -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:
# /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 killproc
función disponible en el /etc/init.d/functions
script, obtenga el archivo y use la función. O use pgrep
y pkill
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.