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 killallou pkill, uma vez que eles usam por padrão o SIGTERMsinal (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 pkille killallaceitam 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 killprocfunção disponível no /etc/init.d/functionsscript, origine o arquivo e use a função Ou use pgrepe pkillutilitários para verificar se eles estão funcionando intencionalmente e depois usá-los. Exemplo: pkill -SIGTERM mysqldenviaria 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.