Eu costumo matar um processo com killall
.
killall markdoc
Mas não tenho certeza se esse comando finaliza o processo normalmente. Este comando alcança um término normal? Caso contrário, como posso matar um processo com seu nome normalmente?
Eu costumo matar um processo com killall
.
killall markdoc
Mas não tenho certeza se esse comando finaliza o processo normalmente. Este comando alcança um término normal? Caso contrário, como posso matar um processo com seu nome normalmente?
Respostas:
Sua pergunta não é clara: você fala sobre um daemon no título, mas no corpo apenas fala sobre um processo genérico.
Para um daemon, existem meios específicos para pará-lo, por exemplo, no Debian, você tem
service daemon-name stop
ou
/etc/init.d/daemon-name stop
Existem sintaxes semelhantes para outros padrões initscript usados em outras distribuições / SO.
Para eliminar um processo que não seja daemon, supondo que ele esteja de alguma forma fora de controle, você pode usar com segurança killall
ou pkill
, uma vez que eles usam por padrão o SIGTERM
sinal (15), e qualquer aplicativo decentemente escrito deve capturar e sair normalmente ao receber esse sinal . Leve em consideração que esses utilitários podem matar mais de um processo, se houver muitos com o mesmo nome.
Se isso não funcionar, você pode tentar SIGINT
(2), depois SIGHUP
(1) e como último recurso SIGKILL
(9). Este último sinal não pode ser capturado pelo aplicativo, para que ele não possa executar nenhuma limpeza. Por esse motivo, deve ser evitado sempre que possível.
Ambos pkill
e killall
aceitam um parâmetro de sinal no formulário -NAME
, como em
pkill -INT process-name
markdoc serve &
e svnserve -d
. Eu acho que é uma espécie de daemon, mas nada estava certo para mim :)
killall
é o assassino!
Nas distribuições do tipo BSD e outras, você geralmente terá scripts em /etc/rc.d/ que normalmente gerenciam o início, a reinicialização e a parada de daemons em seu sistema. Para parar um daemon, você chamaria os scripts com o caminho absoluto, por exemplo:
# /etc/rc.d/acpid stop
ou use o comando:
# rc.d stop acpid
Eu recomendo experimentar este script para mostrar seus sistemas iniciados e interrompidos daemons:
#!/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 a killproc
função disponível no /etc/init.d/functions
script, origine o arquivo e use a função Ou use pgrep
e pkill
utilitários para verificar se eles estão funcionando intencionalmente e depois usá-los. Exemplo: pkill -SIGTERM mysqld
enviaria o sinal de interrupção do TERM para que o mysqld executasse um desligamento seguro e liberasse os bancos de dados no disco antes de ser morto.