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 ( myServeraquí) se está ejecutando.
bash
command-line
kill
myWallJSON
fuente
fuente

killsolo 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 usarpkillokillallhacer exactamente lo mismo que intenta hacer, pero con menos para escribir (y probablemente algunas otras ventajas también).Respuestas:
Usualmente solo uso pgrep y pkill
fuente
pkill myServerokillall -q myServer? No hay inconveniente en intentar matar procesos inexistentes.|| trueentonces.if ! killall -q myServer; then echo ERROR; fi?Puede eliminar procesos por nombre usando
pkillokillall, consulte sus páginas de manual.fuente
kill, esto mata solo si el proceso se está ejecutando. Por ejemplopkill -u myuser -f myprocess\.[0-9]+Un enfoque un poco diferente sería algo como esto:
Esto evitará el
1Código de error devuelto por elkillallcomando, si el proceso no existiera. Laechoparte solo entrará en acción, sikillallregresa1, mientras que sí misma regresará0(éxito).fuente
killall -qes mejorkillall -qno es compatible con todos los sabores de Unix, macOS Catalina todavía no lo tiene.intente usar:
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.
fuente
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
guárdelo con un nombre como script.sh y luego
Luego dale el nombre de tu proceso.
Nota: He intentado muchas veces con esto y está bien.
fuente
Compruebe si el proceso existe con
pidof. Si lo hace, mátalo:El código de salida siempre es 0 después de ejecutar el comando anterior.
fuente
Usar
pkillcon opción-fLa opción
-fes el patrón que normalmente se compara con el nombre del proceso.fuente
Yo usaría:
El
xargs -rle dice a ejecutar kill solo si hay entrada. Elps --no-header -eo pid,cmdobtiene el resultado en un mejor formato para el análisis sintáctico.fuente