Dans les très rares occasions où cela m'est arrivé dans le passé, j'ai commencé à bricoler avec dtrace
scripts pour savoir ce qui se passe. Un scripts prêt à l'emploi est opensnoop
.
Donc, la prochaine fois que vous rencontrerez ce problème, jouez avec comme suit :
$ sudo opensnoop -ve
ou de limiter la sortie à ce que vous attendez :
$ sudo opensnoop -ve | grep -i chrome
Les processus à courte durée de vie peuvent ne pas apparaître dans votre base de données. ps
Une autre option consiste donc à utiliser le cadre de traçage des limites de fonctions disponible pour les services de l'UE. dtrace
. Très probablement, votre version OSX aura des points d'entrée simples définis pour la couche VFS (appelez-la dump_vfs.d) :
#!/usr/sbin/dtrace -s
#pragma D option quiet
#pragma D option switchrate=10hz
dtrace:::BEGIN {
printf("%-12s %6s %6s %-12.12s %-12s %s\n", "TIME(ms)", "UID",
"PID", "PROCESS", "CALL", "DIR/FILE");
}
fbt::VNOP_CREATE:entry,
fbt::VNOP_REMOVE:entry {
this->path = ((struct vnode *)arg0)->v_name;
this->name = ((struct componentname *)arg2)->cn_nameptr;
printf("%-12d %6d %6d %-12.12s %-12s %s/%s\n",
timestamp / 1000000, uid, pid, execname, probefunc,
this->path != NULL ? stringof(this->path) : "<null>",
stringof(this->name));
}
L'appeler est similaire à ce qui précède :
$ sudo dtrace -s dump_vfs.d
Une prouesse fonctionnellement proche peut être réalisée par la fs_usage
surtout si vous soupçonnez le processus en question d'être suspendu dans une boucle d'événements, tout en continuant à accéder à la couche fs en utilisant des appels système.
C'est peut-être un peu exagéré, car le choix le plus pragmatique est probablement d'appuyer sur le bouton d'alimentation. Puisque vous avez mentionné que vous avez envoyé un rapport à Apple, vous pourriez vouloir le vérifier à nouveau aux endroits suivants :
~/Library/Logs/DiagnosticReports/
/Library/Logs/DiagnosticReports/
Cela devrait vous donner des indications supplémentaires sur la raison pour laquelle cette application s'est arrêtée de cette manière.
Votre curiosité concernant la gestion de telles situations par le système d'exploitation peut probablement être partiellement satisfaite en consultant les sources du noyau XNU à l'adresse suivante bsd/kern/kern_shutdown.c
. À un moment donné, le processus d'arrêt initié par le Finder se heurte à un timeout, qui consigne alors les tentatives de SIGTERM échouées (extrait de ma copie locale de la version 2782.1.97 des sources du noyau Darwin) :
[...]
for (p = allproc.lh_first; p; p = p->p_list.le_next) {
if (p->p_shutdownstate == 1) {
printf("%s[%d]: didn't act on SIGTERM\n", p->p_comm, p->p_pid);
sd_log(ctx, "%s[%d]: didn't act on SIGTERM\n", p->p_comm, p->p_pid);
}
}
[...]
Cela indique que le Console
peut vous montrer les entrées de journal pertinentes. En fonction d'une situation potentielle de live lock concernant un fichier détenu sur une partition montée en réseau qui vient de perdre son signal de couche 1, le noyau entrera dans une boucle d'attente de 100 à 200 secondes, en fonction de certains paramètres de timeout de montage VFS.
Pour l'anecdote, j'ai eu très peu de plaisir avec la stabilité de Chrome sur mon MBP, principalement parce que je crois que les mises à jour récentes du pilote central nvidia dans le MBP ont eu un impact sur la stabilité de Chrome. OSX >= 10.9
ainsi que les fonctionnalités élevées de gestion de l'énergie et maintenant appnap, combinés aux récentes avancées dans la gestion du plugin shockwave dudit navigateur, ont causé des ravages à plusieurs reprises. En plus de cela, Chrome en 2014 était pour moi le plus gourmand en énergie de tous les navigateurs.
Il existe probablement une demi-douzaine d'autres scénarios expliquant pourquoi vous avez été accueilli par cette interface graphique de rétroaction peu motivée. Aucun d'entre eux ne se rapproche, même de loin, des problèmes auxquels vous avez brièvement fait référence en mentionnant Win95 :).
Appuie sur le bouton d'alimentation, déjà !
0 votes
Dans cette situation, une autre façon de quitter de force Chrome (et ses processus d'onglets associés) consiste à ouvrir Terminal.app et à exécuter la commande suivante :
killall 'Google Chrome'
(attention, ces guillemets simples sont nécessaires). Cela tue le(s) processus ciblé(s) avec un signal TERM. Je ne suis pas sûr que cela fonctionne lorsque "Force Quit" a échoué d'une manière ou d'une autre (maiskillall
debe toujours fonctionner).0 votes
Merci. Mais où cette information reste-t-elle dans l'OS ? Je veux dire : aucun processus dans "ps aux" n'avait quelque chose de vaguement lié à Chrome. Ma question n'est pas seulement de savoir comment récupérer dans ces situations : J'aimerais vraiment comprendre comment le système d'exploitation gère le lancement et la suppression des applications.
0 votes
Il s'agit probablement d'une situation extrême. Je pense que le fait de tuer ("Force Quit") Google Chrome ne tue pas tous les processus "Google Chrome Helper", peut-être que le problème initial était que l'un d'entre eux a perdu la tête et a été détaché comme enfant du processus GC principal. Si c'est le cas, la solution pourrait être de forcer manuellement l'arrêt de tous les processus "Google Chrome Helper" restants.
0 votes
Oui, mais comment les tuer si aucune référence à Google Chrome ou à ses processus d'aide n'est retournée par
ps
ou Activity Monitor ? Compte tenu de l'état du système de fichiers d'Apple, ne pensez-vous pas que cela pourrait être lié à un fichier qui reste suspendu quelque part ?