Come uccidere un demone con il suo nome con grazia?


16

Di solito uccido un processo con killall.

killall markdoc

Ma non sono sicuro che questo comando termini il processo con garbo. Questo comando ottiene una chiusura graduale? In caso contrario, come posso uccidere un processo con il suo nome con grazia?


La tua distribuzione ha un demone start-stop ?
Manatwork

Sto usando Ubuntu 10.04 LTS server x64 . Cos'è quel demone?
Eonil,

È uno strumento generico per avviare / arrestare i daemon e gestire le informazioni correlate, come i file pid. È presente in Ubuntu, vedi la sua pagina man .
arte

Risposte:


19

La tua domanda non è chiara, nel titolo parli di un demone, ma nel corpo parli solo di un processo generico.

Per un demone ci sono mezzi specifici per fermarlo, ad esempio in Debian che hai

    service daemon-name stop

o

    /etc/init.d/daemon-name stop

Sintassi simili esistono per altri standard initscript utilizzati in altre distribuzioni / sistemi operativi.

Per uccidere un processo non daemon, supponendo che sia in qualche modo fuori controllo, puoi tranquillamente usare killallo pkill, dato che usano di default il SIGTERMsegnale (15), e qualsiasi applicazione scritta decentemente dovrebbe catturare e uscire con garbo alla ricezione di questo segnale . Tieni presente che queste utility potrebbero uccidere più di un processo, se ce ne sono molti con lo stesso nome.

Se il problema persiste, puoi provare SIGINT(2), quindi SIGHUP(1) e come ultima risorsa SIGKILL(9). Quest'ultimo segnale non può essere catturato dall'applicazione, quindi non può eseguire alcuna pulizia. Per questo motivo dovrebbe essere evitato ogni volta che puoi.

Entrambi pkille killallaccettano un parametro di segnale nella forma -NAME, come in

pkill -INT process-name

Grazie. In realtà la mia domanda originale riguardava markdoc serve &e svnserve -d. Penso che sia una specie di demone, ma nulla era certo per me :)
Eonil,

killallè l'assassino!
xdevs23

3

Su BSD e altre distribuzioni, spesso avrai script in /etc/rc.d/ che in genere gestiscono l'avvio, il riavvio e l'arresto dei demoni nel tuo sistema. Per fermare un demone dovresti chiamare gli script con il percorso assoluto, ad esempio:

# /etc/rc.d/acpid stop

o usa il comando:

# rc.d stop acpid

Consiglio vivamente di provare questo script per mostrare i sistemi avviati e arrestati daemon:

#!/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

0

Controlla la killprocfunzione disponibile nello /etc/init.d/functionsscript, trova il file e usa la funzione. Oppure utilizzare pgrepe pkillutilità per verificare se funzionano intenzionalmente e quindi utilizzarli. Esempio: pkill -SIGTERM mysqldinvierebbe il segnale TERM kill per fare in modo che mysqld esegua un arresto sicuro e svuoti i database sul disco, prima di essere ucciso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.