2009-05-24 13 views
43

Intenté kill -9 698 pero el proceso no murió.¿Cómo matar un proceso en MacOS?

$ ps -ef | grep chromium 
    502 698 811 0 0:01.24 ??   0:07.28 /Users/lucius/chromium/src/xcodebuild/Debug/Chromium.app/Contents/MacOS/Chromium 
    502 854 732 0 0:00.00 ttys001 0:00.00 grep chromium 
$ kill -9 698 


$ ps -ef | grep chromium 
    502 698 811 0 0:01.24 ??   0:07.28 /Users/lucius/chromium/src/xcodebuild/Debug/Chromium.app/Contents/MacOS/Chromium 
    502 854 732 0 0:00.00 ttys001 0:00.00 grep chromium 

Respuesta

4

Si conoce el nombre del proceso que puede utilizar:

killall Dock 

Si no puede abrir el Monitor de Actividad y encontrarlo.

+0

creo que podría ser una mala idea para ejecutar realmente ese comando. Supongo que podría simplemente reiniciar el dock fácilmente, pero no sé si habría algún problema con ese enfoque. –

+0

Fue solo un ejemplo de un proceso, no quiero que mate su muelle. Supongo que 'killall' toma una cadena diferente en comparación con kill. – Garrett

77

Si intenta matar -9, tiene el PID correcto y no ocurre nada, entonces no tiene permisos para matar el proceso.

Solución:

$ sudo kill -9 PID 

bien, por supuesto Mac OS/X da un mensaje de error para este caso:

$ kill -9 196 
-bash: kill: (196) - Operation not permitted 

lo tanto, si usted no está recibiendo un mensaje de error, de alguna manera no está obteniendo el PID correcto.

+0

Podría ser cierto, pero parece que recuerdo matar dando un mensaje de error si el proceso no fue propiedad del asesino. – paxdiablo

+0

Dios, ese es uno de esos comportamientos que es diferente de UNIX a UNIX. Es deseable * no * tener ese error, porque es un canal encubierto; por otro lado, es un mensaje de error útil. –

+0

¿Qué UNIX no da ningún error aquí? He probado BSD, Linux y Solaris y todos dan alguna forma del error anterior (EPERM). –

2

Si kill -9 no funciona, entonces tampoco lo hará killall (o incluso killall -9 que sería más "intenso"). Aparentemente, el proceso de cromo está atascado en una llamada al sistema no interrumpible (es decir, en el kernel, no en el territorio del usuario); no creía que MacOSX tuviera ninguno, pero supongo que siempre hay uno más :-(. Si eso proceso tiene un terminal controlador que probablemente puede hacer un fondo y matarlo mientras está en segundo plano, de lo contrario (o si la muerte intensa no funciona incluso una vez que el proceso se basa) Me he quedado sin ideas y estoy pensando que podría tener que reiniciar :-(.

2

Dado el camino a su programa, supongo que actualmente está ejecutando esto bajo Xcode, y probablemente esté en un punto de corte de depuración. Los procesos no se pueden matar en este estado debido a la implementación subyacente de los puntos de interrupción

El primer paso sería ir a su proceso Xcode y detener la depuración. Por alguna razón extraña ha perdido el acceso a Xcode (tal vez Xcode ha perdido el acceso a su subproceso gdb), entonces la solución es matar el proceso gdb. En términos más generales, la solución aquí es matar el proceso principal. En su caso, esto es PID 811 (la tercera columna).

No es necesario utilizar -9 en este caso.

1

He experimentado que si kill -9 PID no funciona y usted es el propietario del proceso, puede usar kill -s kill PID, lo que es sorprendente ya que la página del manual dice que puede kill -signal_number PID.

+0

'kill -s kill 9' me ayudó – boraas

2

hace un momento me han buscado para esto ya que estoy en una situación similar, y en vez de kill -9 698 me trataron sudo kill 428 donde 428 fue el pid del proceso que estoy tratando de matar. Funcionó limpiamente para mí, en ausencia del carácter guión '-'. ¡Espero que ayude!

+0

Sí, intento sudo kill -9 PID - esto funcionó para mí (no sé por qué no podemos matarlo del usuario y exigir elevación) – Rob

3

En algunos casos es posible que desee eliminar todo el proceso que se ejecuta en un puerto específico. Por ejemplo, si estoy ejecutando una aplicación de nodo en el puerto 3000 y quiero matar eso e iniciar uno nuevo; entonces encontré este comando útil.

buscar los ID de proceso que se ejecuta en el puerto TCP 3000 y matarlo

kill -9 `lsof -i TCP:3000 | awk '/LISTEN/{print $2}'` 
Cuestiones relacionadas