¿Hay algo más fuerte que "Force Quit"?

24

Tengo una aplicación que no morirá: se fue del muelle, pero la ventana permanece (con una pelota de playa, si paso el mouse sobre ella). No usa CPU, pero quiero que desaparezca.

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

Conocer
fuente
No estoy seguro de si es más fuerte, pero prueba Aplicaciones> Utilidades> Monitor de actividad. Encuentre el proceso y forzar el abandono. Si eso no funciona, tenga en cuenta el número de proceso, vaya a Terminal y escriba "kill #" donde # es el número de proceso. HTH
David DelMonte
66
el botón de encendido?
Daniel
1
@DanielLawson Desafortunadamente, estas situaciones generalmente resultan en eso.
CajunLuke
1
David: Supongo que lo que Apple llama "Force Quit" es lo mismo sin importar cómo lo hagas, pero también lo intenté, sin ningún efecto.
Ken

Respuestas:

14

Si conoce el nombre de la aplicación, puede verificar en el Monitor de actividad para ver si todavía se está ejecutando allí y probar Force Quit. Si eso no funciona, tome nota del 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 (esto no es probable), es posible que tenga que sustituir killcon sudo killy escriba la contraseña cuando se le solicite.

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

Si nada de esto funciona, tendrá que cerrar sesión y volver a iniciarla o reiniciarla. Las pocas veces que llegué a este punto, la aplicación estaba tan atascada que impidió el cierre de sesión o el cierre, por lo que tuve que reiniciar.

CajunLuke
fuente
Intenté todo esto (incluso sudo, aunque el proceso es mío), sin cambios. ¿ killall SystemUIServerAfectará a cualquiera de mis otras aplicaciones abiertas, como olvidar las posiciones de las ventanas?
Ken
2
gentmatt: Según kill -l, -3 es SIGQUIT y -9 es SIGKILL ("muerte no capturable, no ignorable").
Ken
1
@gentmatt 3 es la señal QUIT que le da al proceso la capacidad de interceptar la señal y realizar la limpieza. 9 es KILL es "no atrapable e ignorable". Hay un montón de otras señales que puede enviar; ejecutar man kill(que se encuentra entre los 10 mejores comandos de UNIX) para verlos a todos.
CajunLuke
1
Normalmente solo mato -9. -3 no es más fuerte que "Force Quit"
segfault
3
@BoTian True; Salto directamente a -9. A veces no me molesto con Force Quit en absoluto. Pero para un usuario que no sabe lo que está haciendo, podría funcionar y es menos probable que sea dañino. Tampoco lleva mucho tiempo, por lo que el tiempo dedicado a la relación de resultados esperados no es tan malo.
CajunLuke
7

La ventana de cierre forzado killall, y killtodos los procesos de envío de señales TERM por defecto. Puedes usarlo killall -killsi eso no funciona.

La utilidad killall mata los procesos seleccionados por nombre, en oposición a la selección por pid como lo hace kill (1). Por defecto, enviará una señal TERM a todos los procesos con un UID real idéntico al llamador de killall que coincida con el nombre procname. El superusuario puede matar cualquier proceso.

Si ejecuta sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'y cierra alguna aplicación desde la ventana de forzar cierre, la señal generalmente se muestra como -15 (TERM). Pero cuando cierra 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. Causa la terminación de un proceso, pero a diferencia de la señal SIGKILL, el proceso puede atraparlo e interpretarlo (o ignorarlo). Por lo tanto, SIGTERM es similar a pedir que un proceso finalice 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 apagarse, espera unos segundos y luego emite SIGKILL para terminar por la fuerza cualquier proceso que permanezca.

Lri
fuente
Aquí hay buena información, pero ninguna de estas variantes de matar el proceso parece tener ningún efecto en ello.
Ken
Si ni siquiera SIGKILLfunciona, la aplicación probablemente esté en modo de suspensión ininterrumpida , y realmente no hay nada que pueda hacer (salvo reiniciar).
Blacklight Shining
También me pregunto si se trataba de una aplicación de usuario, como mail.app o pages.app, o si se trataba de algún modo, un proceso del sistema, como Spotlight, o un proceso en segundo plano de la aplicación, como Plex (que tengo problemas para eliminar).
David DelMonte
6

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

En este caso, sudo shutdown -r nowfuncionó cuando nada más funcionaría, y probablemente sea mejor que hacer un apagado completo a través del botón de encendido.

El niño Karate
fuente
1

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

Sin embargo, existen procesos que son simplemente imposibles Force Quitni imposibles kill. Llamaron como zombieprocesos.

Aquí hay un breve script que creará un zombieproceso 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á la 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 revisa la columna de estado para el proceso no matable (en este caso: 50571) verá la Zbandera, qué significa zombie.

Puede intentar enviar cualquier killseñal (por ejemplo kill -9 50571) y el proceso seguirá existiendo. De todos modos, no perjudica mucho a su sistema, porque de hecho no existe, solo ocupa la tabla de procesos.

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

jm666
fuente
0

Esto es lo que debes hacer:

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

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

Saludos, Bryan

Brock Vond
fuente