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 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
markdoc serve &y svnserve -d. Creo que es una especie de demonio, pero nada era seguro para mí :)
killalles 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 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.