Zwykle zabijam proces killall
.
killall markdoc
Ale nie jestem pewien, czy to polecenie z wdziękiem kończy proces. Czy to polecenie osiąga pełne zakończenie? Jeśli nie, to jak mogę z wdziękiem zabić proces z jego nazwą?
Zwykle zabijam proces killall
.
killall markdoc
Ale nie jestem pewien, czy to polecenie z wdziękiem kończy proces. Czy to polecenie osiąga pełne zakończenie? Jeśli nie, to jak mogę z wdziękiem zabić proces z jego nazwą?
Odpowiedzi:
Twoje pytanie nie jest jasne, mówisz o demonie w tytule, ale w ciele mówisz tylko o ogólnym procesie.
Dla demona istnieją specjalne sposoby, aby go zatrzymać, na przykład w Debianie
service daemon-name stop
lub
/etc/init.d/daemon-name stop
Podobne składnie istnieją dla innych standardów initscript używanych w innych dystrybucjach / systemach operacyjnych.
Aby zabić proces niebędący demonem, zakładając, że jest on w jakiś sposób poza kontrolą, możesz bezpiecznie użyć killall
lub pkill
, biorąc pod uwagę, że domyślnie używają one SIGTERM
sygnału (15), a każda przyzwoicie napisana aplikacja powinna złapać i z wdziękiem wyjść po otrzymaniu tego sygnału . Weź pod uwagę, że narzędzia te mogą zabić więcej niż jeden proces, jeśli jest ich wiele o tej samej nazwie.
Jeśli to nie zadziała, możesz spróbować SIGINT
(2), a następnie SIGHUP
(1) i w ostateczności SIGKILL
(9). Ten ostatni sygnał nie może zostać przechwycony przez aplikację, więc nie może wykonać żadnego czyszczenia. Z tego powodu należy tego unikać za każdym razem, gdy możesz.
Zarówno pkill
i killall
zaakceptuj parametr sygnału w formie -NAME
, jak w
pkill -INT process-name
markdoc serve &
i svnserve -d
. Myślę, że to rodzaj demona, ale nic nie było dla mnie pewne :)
killall
jest zabójcą!
W dystrybucjach podobnych do BSD i innych często będziesz miał skrypty w /etc/rc.d/, które zazwyczaj zarządzają uruchamianiem, restartowaniem i zatrzymywaniem demonów w twoim systemie. Aby zatrzymać demona, możesz wywołać skrypty ze ścieżką bezwzględną, np .:
# /etc/rc.d/acpid stop
lub użyj polecenia:
# rc.d stop acpid
Zdecydowanie polecam wypróbowanie tego skryptu, aby pokazać, że systemy uruchomiły i zatrzymały demony:
#!/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
Sprawdź killproc
funkcję dostępną w /etc/init.d/functions
skrypcie, pobierz plik i użyj funkcji. Lub użyj pgrep
i pkill
narzędzi, aby sprawdzić, czy działają one celowo, a następnie ich użyć. Przykład: pkill -SIGTERM mysqld
wysłałby sygnał zabicia TERM, aby mysqld wykonał bezpieczne zamknięcie i opróżnił bazy danych na dysku, zanim zostanie zabity.