¿Cómo matar un proceso de Windows en un terminal cygwin?

18

Tengo un problema con respecto a cómo matar un proceso en Cygwin en Windows. Soy completamente nuevo en Cygwin. Pero tengo una tarea que simplemente no puedo matar. He intentado emitir los siguientes comandos:

kill 4568
kill -9 4568
/bin/kill -f 4568

He emitido los comandos en un terminal Cygwin separado ya que no puedo Ctrl + C en el terminal Cygwin donde se ejecuta el proceso. He buscado en todo internet sin éxito.

usuario1093774
fuente
¿Cuál es el proceso que comenzaste y cómo lo empezaste?
yo_y

Respuestas:

25
ps -W | awk '/calc.exe/,NF=1' | xargs kill -f

O

ps -W | awk '$0~v,NF=1' v=calc.exe | xargs kill -f

O

powershell kill -n calc
Steven Penny
fuente
Es posible que desee usar ps -W | awk 'BEGIN{ IGNORECASE=1;} /calc.exe/,NF=1' | xargs kill -fporque Windows no distingue entre mayúsculas y minúsculas
tricasse
7

Puedes probar:

taskkill /pid 4568
aggu
fuente
taskkill /im:{name-of-executable}También es útil.
LawrenceC
Y taskkill /im <name-of-exe> /fes aún más útil.
Erik Kaplun
1
Mala respuesta, el OP solicitó un comando Cygwin.
Hashim
1
Es taskkill //im <name-of-exe>(tenga en cuenta la necesidad de 2 barras)
P.Brian.Mackey
5

Si quieres una solución solo para BASH, prueba esto: (funciona para mí)

    KILLPS="<My Process Name>"
    WINPS=`ps -W | grep -i $KILLPS`         # Make case-insensitive.
    PID=`echo $WINPS | cut -d' ' -f1` 
    /bin/kill -f "$PID"

NOTA: use / bin / kill, la eliminación de shell incrustada no matará los PID para los procesos generales de Windows.

dpminusa
fuente
Su nota sobre / bin / kill vs shell kill fue muy útil. Gracias
Phil
2

(De mi respuesta a una pregunta similar sobre SO ):

Los diferentes programas de Windows manejarán las señales que eliminan los envíos de manera diferente; nunca han sido diseñados para tratar con ellos de la misma manera que los programas Linux / Cygwin.

El único método confiable para matar un programa de Windows es usar una herramienta específica de Windows, como el Administrador de tareas o el Explorador de procesos.

Dicho esto, si aún no lo ha hecho, puede tener suerte con la ejecución de su terminal Cygwin en modo administrador (haga clic derecho en su acceso directo y seleccione "Ejecutar como administrador").

yo y
fuente
1

Dos cosas para pensar aquí:

  1. Obtenga el PID correcto, que es el WINPID.
  2. Usa la herramienta adecuada.

Para obtener el WINPID correcto para matar, use cat /proc/<PID>/winpid. Es decir, ejecuta esto:

ZID=$$; WINPID=$(cat /proc/${ZID}/winpid); echo "Kill WINPID: ${WINPID}"; ps; sleep 10 &

e inmediatamente después de hacer otro ps.

La herramienta correcta para usar es sysinternals, PsKill64.exe -t <winpid> que también mata a todos los descendientes del proceso de script, que killno lo hace.

not2qubit
fuente
1
Tienes un voto cat /proc/${ZID}/winpid, muy bueno saberlo. Y más rápido que la solución con ps -aW | grep ..., al menos en mi cygwin en Win 7 x64. Pero para PsKill64, creo que necesitas -tmatar subprocesos, y taskkilltambién puedes matar subprocesos.
244an
Sí, también necesitas el -tpara matar descendientes. Respuesta corregida
not2qubit
0

Si tiene un programa de Windows que es un subproceso bajo un proceso cygwin bash que puede usar taskkill /F /PID [the cygwin process id] /Tpara eliminar el árbol de procesos, no es necesario obtener el PID de la ventana pscon awketc.
Esto se prueba en Win7 x64.

# Simple example in cygwin:
> notepad.exe &
> pid=$!
...
> taskkill /F /PID $pid /T

Por supuesto, también puede usar el PID de la ventana.

244an
fuente
0

En Git Bash uso:

targetProcess='chromedriver.exe';
ps -W | grep -i ${targetProcess} | awk '{print $1}' | while read pid; do taskkill //PID ${pid}; done;

No lo he probado en Cygwin, pero supongo que también funcionará allí.

Vagelis Prokopiou
fuente