Prima di tutto; "kill -9" dovrebbe essere l'ultima risorsa.
Puoi usare lo kill
comando per inviare diversi segnali a un processo. Il segnale predefinito inviato da kill
è 15 (chiamato SIGTERM). I processi di solito catturano questo segnale, puliscono e poi escono. Quando invii il segnale SIGKILL (-9
) un processo non ha altra scelta che uscire immediatamente. Ciò potrebbe causare file danneggiati e lasciare file di stato e socket aperti che potrebbero causare problemi al riavvio del processo. Il -9
il segnale non può essere ignorato da un processo.
Ecco come lo farei:
#!/bin/bash
# Getting the PID of the process
PID=`pgrep gld_http`
# Number of seconds to wait before using "kill -9"
WAIT_SECONDS=10
# Counter to keep count of how many seconds have passed
count=0
while kill $PID > /dev/null
do
# Wait for one second
sleep 1
# Increment the second counter
((count++))
# Has the process been killed? If so, exit the loop.
if ! ps -p $PID > /dev/null ; then
break
fi
# Have we exceeded $WAIT_SECONDS? If so, kill the process with "kill -9"
# and exit the loop
if [ $count -gt $WAIT_SECONDS ]; then
kill -9 $PID
break
fi
done
echo "Process has been killed after $count seconds."
pidof gld_http
dovrebbe funzionare se è installato sul tuo sistema.
man pidof
dice:
Pidof finds the process id’s (pids) of the named programs. It prints those id’s on the standard output.
MODIFICA:
Per la tua applicazione puoi usare command substitution
:
kill -9 $(pidof gld_http)
Come menzionato da @arnefm, kill -9
dovrebbe essere usato come ultima risorsa.