Jak z wdziękiem zabić demona z jego nazwą?

16

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ą?

Eonil
źródło
Czy twoja dystrybucja ma demona start-stop ?
manatwork
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

pkill -INT process-name
enzotib
źródło
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

źródło
0

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.

Nikhil Mulley
źródło