Y a-t-il quelque chose de plus fort que «Forcer à quitter»?

24

J'ai une application qui ne mourra pas: elle a disparu du dock, mais la fenêtre reste (avec un beachball, si je la souris). Il n'utilise pas de CPU, mais je veux qu'il s'en aille.

Existe-t-il quelque chose de plus fort que "Forcer à quitter" pour vraiment vraiment tuer une application?

Ken
la source
Je ne sais pas si c'est plus fort, mais essayez Applications> Utilitaires> Moniteur d'activité. Recherchez le processus et forcez la fermeture. Si cela ne fonctionne pas, notez le numéro de processus, allez dans Terminal et tapez "kill #" où # est le numéro de processus. HTH
David DelMonte
6
le bouton d'alimentation?
Daniel
1
@DanielLawson Malheureusement, ces situations entraînent généralement cela.
CajunLuke
1
David: Je suppose que ce qu'Apple appelle "Forcer à quitter" est le même, peu importe comment vous y arrivez, mais j'ai essayé aussi, sans effet.
Ken
2
@DavidDelMonte Forcer laSIGTERM
Blacklight Shining

Réponses:

14

Si vous connaissez le nom de l'application, vous pouvez vérifier dans le moniteur d'activité pour voir si elle y est toujours en cours d'exécution et essayer de forcer la fermeture. Si cela ne fonctionne pas, notez l'ID de processus de l'application (pid). Accédez au terminal et tapez kill [pid], en remplaçant "[pid]" par le numéro que vous avez noté précédemment. Si cela ne fonctionne pas, essayez kill -3 [pid]et si cela ne fonctionne pas kill -9 [pid]. Si le processus appartient à un autre utilisateur (ce n'est pas probable), vous devrez peut-être le remplacer killpar sudo killet taper votre mot de passe lorsque vous y serez invité.

Si l'application n'apparaît pas dans le moniteur d'activité ou si vous ne pouvez pas le killfaire, la fenêtre peut être bloquée ailleurs et l'application ne fonctionne tout simplement plus. Dans ce cas, parfois (pas toujours) cela peut fonctionner vers killall SystemUIServerou killall Dock.

Si rien de tout cela ne fonctionne, vous devrez vous déconnecter puis vous reconnecter ou redémarrer. Les quelques fois où j'en suis arrivé à ce point, l'application était si bloquée qu'elle empêchait la déconnexion ou la fermeture, j'ai donc dû redémarrer dur.

CajunLuke
la source
J'ai essayé tout cela (y compris sudo, même si le processus m'appartient), sans changement. Cela killall SystemUIServeraffectera- t -il mes autres applications ouvertes, comme oublier les positions des fenêtres?
Ken
2
gentmatt: Selon kill -l, -3 est SIGQUIT et -9 est SIGKILL ("kill non capturable, non ignorable").
Ken
1
@gentmatt 3 est le signal QUIT qui donne au processus la possibilité d'intercepter le signal et d'effectuer un nettoyage. 9 is KILL est "non capturable et non ignorable". Il y a une pile d'autres signaux que vous pouvez envoyer; exécutez man kill(qui figure parmi les 10 meilleures commandes UNIX de tous les temps) pour les voir toutes.
CajunLuke
1
Normalement, je tue juste -9. -3 n'est pas plus fort que "Forcer à quitter"
segfault
3
@BoTian True; Je passe directement à -9. Parfois, je ne me soucie pas du tout de Forcer à quitter. Mais pour un utilisateur qui ne sait pas ce qu'il fait, cela pourrait fonctionner et est moins susceptible d'être nuisible. Cela ne prend pas non plus très longtemps, donc le temps passé au ratio de résultat attendu n'est pas si mauvais.
CajunLuke
7

La fenêtre Forcer à quitter killall, et killtous les processus d'envoi de signaux TERM par défaut. Vous pouvez utiliser killall -killsi cela ne fonctionne pas.

L'utilitaire killall tue les processus sélectionnés par leur nom, par opposition à la sélection par pid effectuée par kill (1). Par défaut, il enverra un signal TERM à tous les processus avec un vrai UID identique à l'appelant de killall qui correspond au nom procname. Le super-utilisateur est autorisé à tuer tout processus.

Si vous exécutez sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'et quittez une application à partir de la fenêtre de fermeture forcée, le signal est généralement affiché sous la forme -15 (TERM). Mais lorsque vous quittez un processus d'arrière-plan (ou une application qui n'est pas affichée dans le Dock) à partir du moniteur d'activité, le signal est généralement affiché sous la forme -9 (KILL).

SIGTERM est le signal par défaut envoyé à un processus par les commandes kill ou killall. Il provoque la fin d'un processus, mais contrairement au signal SIGKILL, il peut être intercepté et interprété (ou ignoré) par le processus. Par conséquent, SIGTERM revient à demander à un processus de se terminer correctement, permettant le nettoyage et la fermeture des fichiers. Pour cette raison, sur de nombreux systèmes Unix lors de l'arrêt, init envoie SIGTERM à tous les processus qui ne sont pas essentiels à la mise hors tension, attend quelques secondes, puis émet SIGKILL pour arrêter de force tous les processus restants.

Lri
la source
Quelques bonnes informations ici, mais aucune de ces variantes de mise à mort du processus ne semble avoir d'effet sur lui.
Ken
Si cela ne SIGKILLfonctionne même pas , l'application est probablement en veille sans interruption , et il n'y a vraiment rien à faire (à moins de redémarrer).
Blacklight Shining
Je me demandais aussi si c'était une application utilisateur, comme mail.app ou pages.app ou si c'était en quelque sorte, un processus système, comme Spotlight, ou un processus d'arrière-plan d'application, comme Plex (que j'ai du mal à supprimer).
David DelMonte
6

J'ai eu des situations où Forcer à quitter, Moniteur d'activité killet d'autres méthodes ne fonctionnaient pas et mon Mac ne pouvait pas s'arrêter à cause de cela.

Dans ce cas, cela a sudo shutdown -r nowfonctionné quand rien d'autre ne le ferait, et c'est probablement mieux que de faire un arrêt dur via le bouton d'alimentation.

Le Karaté Kid
la source
1

Comme dans les réponses ci-dessus, le moyen le plus efficace de mettre fin à tout processus est SIGKILL, par exemple kill -9 process_id.

Cependant, il existe des processus qui sont tout simplement impossibles à Force Quitni kill. Ils ont appelé comme zombieprocessus.

Voici un petit script qui va créer un zombieprocessus pendant deux minutes:

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

Exécutez le script ci-dessus dans le terminal et vous obtiendrez une sortie, comme la suivante:

     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 vous cochez la colonne d'état pour le processus impossible à tuer (dans ce cas: 50571), vous voyez le Zdrapeau, ce qui signifie zombie.

Vous pouvez essayer d'envoyer n'importe quel killsignal (par exemple kill -9 50571) et le processus existera toujours. Quoi qu'il en soit, cela ne blesse pas beaucoup votre système, car il n'existe en fait pas - occupe uniquement la table de processus.

Dans l'exemple ci-dessus, en 120 secondes, il sera effacé.

jm666
la source
0

Voici ce que vous devez faire:

  1. Dans le Moniteur d'activité, double-cliquez sur le processus OU cliquez sur l'icône Infos pour ouvrir la fenêtre du processus.
  2. Vous verrez le processus # dans la ligne du groupe de processus sous la forme processName (####) où "####" est le numéro de votre processus.
  3. Ouvrez le terminal et tapez "sudo kill ####" sans les guillemets et appuyez sur Entrée
  4. Entrez votre mot de passe, le terminal n'affichera pas votre saisie ici
  5. Le processus est tué.

Il est préférable de supprimer un processus comme celui-ci en mode sans échec si vous souhaitez tenter une désinstallation.

À la vôtre, Bryan

Brock Vond
la source