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ą?
Korzystam z serwera Ubuntu 10.04 LTS x64 . Co to za demon?
Eonil
Jest to ogólne narzędzie do uruchamiania / zatrzymywania demonów i zarządzania powiązanymi informacjami, takimi jak pliki pid. Jest obecny w Ubuntu, zobacz jego stronę podręcznika .
manatwork
Odpowiedzi:
19
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ć killalllub pkill, biorąc pod uwagę, że domyślnie używają one SIGTERMsygnał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 pkilli killallzaakceptuj parametr sygnału w formie -NAME, jak w
Dziękuję Ci. Właściwie moje pierwotne pytanie dotyczyło markdoc serve &i svnserve -d. Myślę, że to rodzaj demona, ale nic nie było dla mnie pewne :)
Eonil
killalljest zabójcą!
xdevs23
3
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ź killprocfunkcję dostępną w /etc/init.d/functionsskrypcie, pobierz plik i użyj funkcji. Lub użyj pgrepi pkillnarzędzi, aby sprawdzić, czy działają one celowo, a następnie ich użyć. Przykład: pkill -SIGTERM mysqldwysłałby sygnał zabicia TERM, aby mysqld wykonał bezpieczne zamknięcie i opróżnił bazy danych na dysku, zanim zostanie zabity.
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
lub
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
lubpkill
, biorąc pod uwagę, że domyślnie używają oneSIGTERM
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ępnieSIGHUP
(1) i w ostatecznościSIGKILL
(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
ikillall
zaakceptuj parametr sygnału w formie-NAME
, jak wźródło
markdoc serve &
isvnserve -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 .:
lub użyj polecenia:
Zdecydowanie polecam wypróbowanie tego skryptu, aby pokazać, że systemy uruchomiły i zatrzymały demony:
źródło
Sprawdź
killproc
funkcję dostępną w/etc/init.d/functions
skrypcie, pobierz plik i użyj funkcji. Lub użyjpgrep
ipkill
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.źródło