Actualmente uso una línea como esta en mi archivo de script sh:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Pero me pregunto cómo llamarlo solo si el proceso ( myServer
aquí) se está ejecutando.
Actualmente uso una línea como esta en mi archivo de script sh:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Pero me pregunto cómo llamarlo solo si el proceso ( myServer
aquí) se está ejecutando.
Respuestas:
Usualmente solo uso pgrep y pkill
if pgrep myServer; then pkill myServer; fi
pkill myServer
o killall -q myServer
? No hay inconveniente en intentar matar procesos inexistentes.
|| true
entonces.
if ! killall -q myServer; then echo ERROR; fi
?
Un enfoque un poco diferente sería algo como esto:
killall PROCESS || echo "Process was not running."
Esto evitará el 1
Código de error devuelto por el killall
comando, si el proceso no existiera. La echo
parte solo entrará en acción, si killall
regresa 1
, mientras que sí misma regresará 0
(éxito).
killall -q
es mejor
killall -q
no es compatible con todos los sabores de Unix, macOS Catalina todavía no lo tiene.
intente usar:
sudo kill `pidof process_name`
donde nombre_proceso es el nombre del proceso que desea eliminar. Lo bueno de esto es que pidof enumerará los pid de todos los procesos que coincidan con el nombre de pila. Dado que kill acepta múltiples pid's, matará a todos ellos de una sola vez.
Déjeme saber si esto ayuda.
kill `pidof process_name
. Si devuelve una lista vacía, omita la llamada a matar.
Pequeño guión que he creado con I + D. espero que te guste
#!/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
guárdelo con un nombre como script.sh y luego
chmod +x script.sh
./script.sh
Luego dale el nombre de tu proceso.
Nota: He intentado muchas veces con esto y está bien.
Compruebe si el proceso existe con pidof
. Si lo hace, mátalo:
(! pidof process_name) || sudo kill -9 $(pidof process_name)
El código de salida siempre es 0 después de ejecutar el comando anterior.
kill
solo cuando el proceso se está ejecutando, porque hay una condición de carrera entre la prueba y la invocación dekill
(es posible que el proceso se haya detenido por otro motivo en ese corto tiempo). Debería usarpkill
okillall
hacer exactamente lo mismo que intenta hacer, pero con menos para escribir (y probablemente algunas otras ventajas también).