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 ( myServerqui) è 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 ( myServerqui) è in esecuzione?
Risposte:
Di solito uso solo pgrep e pkill
if pgrep myServer; then pkill myServer; fi
pkill myServero killall -q myServer? Non c'è alcun aspetto negativo nel tentare di uccidere processi inesistenti.
|| truequindi.
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 1codice di errore restituito dal killallcomando, se il processo non esistesse. La echoparte entrerà in azione solo se killallritorna 1, mentre essa stessa tornerà 0(successo).
killall -qè meglio
killall -qnon è 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.
killsolo 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 usarepkillokillallche fanno esattamente lo stesso di quello che cerchi di fare, ma con meno da scrivere (e probabilmente anche altri vantaggi).