¿Hay algo más fuerte que "Forzar salida"?

24

Tengo una aplicación que no va a morir: se ha ido del muelle, pero la ventana permanece (con una bola de playa, si hago clic con el mouse sobre ella). No utiliza CPU, pero quiero que desaparezca.

¿Hay algo más fuerte que "Force Quit", para realmente realmente matar una aplicación?

    
pregunta Ken 20.09.2012 - 21:24

5 respuestas

14

Si conoce el nombre de la aplicación, puede consultar el Monitor de actividad para ver si todavía se está ejecutando allí y probar su Forzar Salir. Si eso no funciona, tome nota de la ID de proceso de la aplicación (pid). Vaya a la Terminal y escriba kill [pid] , reemplazando "[pid]" con el número que anotó anteriormente. Si eso no funciona, intente kill -3 [pid] y si eso no funciona kill -9 [pid] . Si el proceso es propiedad de un usuario diferente (no es probable), es posible que deba reemplazar kill con sudo kill y escribir su contraseña cuando se le solicite.

Si la aplicación no se muestra en el Monitor de actividad o no pudo kill , la ventana puede quedar bloqueada en otro lugar y la aplicación simplemente ya no se está ejecutando. En este caso, a veces (no siempre) puede funcionar para killall SystemUIServer o killall Dock .

Si nada de esto funciona, deberás cerrar sesión y reiniciar. Las pocas veces que llegué a este punto, la aplicación estaba tan atascada que impidió cerrar la sesión o apagarse, así que tuve que reiniciar con fuerza.

    
respondido por el CajunLuke 20.09.2012 - 21:34
7

La ventana de salida forzada, killall y kill envían señales TERM de forma predeterminada. Puedes usar killall -kill si eso no funciona.

  

La utilidad killall mata los procesos seleccionados por nombre, a diferencia de la selección por pid tal como lo hace kill (1). De manera predeterminada, enviará una señal de TERM para todos los procesos con un UID real idéntico al llamante de killall que coincida con el nombre procname. El superusuario tiene permitido matar cualquier proceso.

Si ejecuta sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }' y sale de alguna aplicación desde la ventana de forzar el cierre, la señal generalmente se muestra como -15 (TERMINACIÓN). Pero cuando abandonas un proceso en segundo plano (o una aplicación que no se muestra en el Dock) desde el Monitor de actividad, la señal generalmente se muestra como -9 (KILL).

  

SIGTERM es la señal predeterminada enviada a un proceso por los comandos kill o killall. Provoca la terminación de un proceso, pero a diferencia de la señal SIGKILL, puede ser detectada e interpretada (o ignorada) por el proceso. Por lo tanto, SIGTERM es como pedirle a un proceso que termine bien, permitiendo la limpieza y el cierre de archivos. Por esta razón, en muchos sistemas Unix durante el apagado, init emite SIGTERM a todos los procesos que no son esenciales para el apagado, espera unos segundos y luego emite SIGKILL para finalizar por la fuerza cualquier proceso que permanezca.

    
respondido por el user495470 21.09.2012 - 10:29
6

He tenido situaciones en las que Force Quit, Activity Monitor, kill y otros métodos no funcionaron, y mi Mac no pudo apagarse debido a eso.

En este caso, un sudo shutdown -r now funcionó cuando nada más lo haría, y es probablemente mejor que hacer un apagado duro a través del botón de encendido.

    
respondido por el TheKarateKid 10.09.2015 - 17:04
1

Como en las respuestas anteriores, la forma más segura de terminar un proceso es SIGKILL , por ejemplo. kill -9 process_id .

Sin embargo, existen procesos que son simplemente imposibles de Force Quit ni kill . Llamaron como zombie procesos.

Aquí hay un breve guión que creará un proceso zombie durante dos minutos:

perl -e 'if($p=fork) {print "unkillable pid:$p\n" ;system("ps -l"); sleep(120)}'

Ejecute el script anterior en la Terminal y obtendrá una salida, como la siguiente:

     unkillable pid:50571
        UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S             ADDR TTY           TIME CMD
        501 47380 47379     4006   0  31  0  2448416   2900 -      S                   0 ttys000    0:00.36 -bash
        501 50570 47380     4006   0  31  0  2443512   1424 -      S+                  0 ttys000    0:00.01 perl -e if($p=fork) {print "u
#THIS-> 501 50571 50570     2006   0   0  0        0      0 -      Z+                  0 ttys000    0:00.00 (perl)
        501 12795 12794     4006   0  31  0  2448296   1752 -      S+                  0 ttys001    0:00.75 -bash
        501 50123 50122     4006   0  31  0  2448296   2688 -      S+                  0 ttys002    0:00.14 -bash

Si verifica la columna de estado para el proceso que no se puede matar (en este caso: 50571) verá el indicador Z , ¿qué significa zombie ?

Puedes intentar enviar cualquier señal kill (por ejemplo, kill -9 50571 ) y el proceso seguirá existiendo. De todos modos, no duele mucho su sistema, porque en realidad no existe, solo ocupa la tabla de procesos.

En el ejemplo anterior, en 120 segundos se borrará.

    
respondido por el jm666 02.08.2014 - 10:29
0

Esto es lo que debes hacer:

  1. En el Monitor de actividad, haga doble clic en el proceso O haga clic en el ícono Información para abrir la ventana del proceso.
  2. Verá el número de proceso en la línea de Grupo de proceso como Nombre de proceso (####) donde "####" es el número de su proceso.
  3. Abre el terminal y escribe "sudo kill ####" sin las comillas y pulsa enter
  4. Ingrese su contraseña, el terminal no mostrará su entrada aquí
  5. El proceso está muerto.

Un proceso como este se elimina mejor en modo seguro si va a intentar una desinstalación.

Saludos, Bryan

    
respondido por el Brock Vond 21.03.2016 - 07:34

Lea otras preguntas en las etiquetas