Attualmente uso una linea come questa nel mio file di script sh:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Ma mi chiedo come chiamarlo solo se il processo ( myServer
qui) è in esecuzione?
Attualmente uso una linea come questa nel mio file di script sh:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Ma mi chiedo come chiamarlo solo se il processo ( myServer
qui) è in esecuzione?
Risposte:
Di solito uso solo pgrep e pkill
if pgrep myServer; then pkill myServer; fi
pkill myServer
o killall -q myServer
? Non c'è alcun aspetto negativo nel tentare di uccidere processi inesistenti.
|| true
quindi.
if ! killall -q myServer; then echo ERROR; fi
?
Un approccio un po 'diverso sarebbe qualcosa del genere:
killall PROCESS || echo "Process was not running."
Ciò eviterà il 1
codice di errore restituito dal killall
comando, se il processo non esistesse. La echo
parte entrerà in azione solo se killall
ritorna 1
, mentre essa stessa tornerà 0
(successo).
killall -q
è meglio
killall -q
non è supportato su tutti i gusti unix, macOS Catalina non ce l'ha ancora.
prova a usare:
sudo kill `pidof process_name`
dove nome_processo è il nome del processo che si desidera uccidere. La cosa fantastica di questo è che pidof elencherà i pid di tutti i processi che corrispondono al nome dato. Poiché kill accetta più pid, ucciderà tutti in un solo capriccio.
Fammi sapere se questo aiuta.
kill `pidof process_name
. Se restituisce un elenco vuoto, salta la chiamata di arresto.
Small Script che ho creato con ricerca e sviluppo. Spero ti piaccia
#!/bin/bash
echo " Enter the process name:"
read $proc_name
if pgrep $proc_name
then
echo " $proc_name running "
pkill $proc_name
echo "$proc_name got killed"
else
echo " $proc_name is not running/stopped "
fi
salvalo con un nome come script.sh quindi
chmod +x script.sh
./script.sh
Quindi fornire il nome del processo.
Nota: ho provato molte volte con questo e va bene.
Controlla se il processo esiste pidof
. Se lo fa, uccidilo:
(! pidof process_name) || sudo kill -9 $(pidof process_name)
Il codice di uscita è sempre 0 dopo aver eseguito il comando sopra.
kill
solo quando il processo è in esecuzione, poiché esiste una condizione di competizione tra il test e l'invocazionekill
(è possibile che il processo si sia arrestato per un altro motivo in quel breve periodo). Dovresti usarepkill
okillall
che fanno esattamente lo stesso di quello che cerchi di fare, ma con meno da scrivere (e probabilmente anche altri vantaggi).