35 votes

Connexion au terminal bloquée

J'ai un problème étrange sur mon nouveau MacBook Pro (fin 2016, avec Touch Bar).

Tout fonctionne bien et puis, après l'avoir utilisé un moment, l'ouverture de nouvelles fenêtres de Terminal ne fonctionne pas car login se bloque. Le redémarrage résout le problème.

Cela semble être un problème que d'autres personnes ont rencontré, donc j'ai déjà essayé toutes leurs solutions (de 1 et [2]) :

  1. Supprimer ~/Library/Preferences/com.apple.Terminal.plist
  2. Définir mon shell par défaut sur un autre shell (de /bin/zsh à /bin/sh ou /bin/bash)
  3. Supprimer ou nettoyer mon .profile, .zprofile, ... Cela ne fonctionne pas et je peux valider que le problème survient avant même que le shell soit invoqué, car si j'ajoute echo HEY comme première ligne de mon .zshenv, cela n'est même pas atteint. Ce doit être login qui pose problème. Modifier /etc/profile pour ajouter un echo en haut ne montre rien
  4. Changer le paramètre Exécuter la commande : dans ma configuration de Terminal pour quelque chose comme echo foo ne fonctionne pas non plus (cocher ou décocher Exécuter à l'intérieur du shell ne change rien).

Autres notes :

  • Comme mentionné dans [2], ssh-add -K ne conserve pas les clés entre les redémarrages, quelque chose que je n'avais jamais eu de problèmes auparavant.
  • La console ne montre aucun erreur ou avertissement suspect.
  • Ouvrir une nouvelle fenêtre de Terminal semble créer un fichier tty (/dev/ttys).
  • Quand cela se produit, cela n'a pas d'importance si j'utilise Terminal.app ou iTerm.app
  • J'ai une installation plutôt propre (je viens de recevoir mon ordinateur portable, je n'ai pas restauré de sauvegardes, juste installé quelques applications avec brew install et brew cask install).

C'est vraiment difficile à déboguer car je ne peux pas le reproduire et souvent je ne peux pas ouvrir un nouveau terminal pour essayer même de comprendre ce qui se passe.

Est-ce que quelqu'un a des conseils?

Mise à jour :

En utilisant iTerm, j'ai réussi à obtenir un shell en définissant la commande de démarrage sur /bin/bash. Dans ce shell, cependant, sudo ne fonctionne pas. Il se bloque (sans afficher le prompt) et ctrl-C et ctrl-D ne fonctionnent pas quand il se bloque.

L'utilisation de certaines autres applications ne fonctionne pas dans ce shell : node ou /usr/local/bin/node restent bloqués. Autant que je puisse le dire, ce sont des programmes qui se trouvent dans /usr/local/bin.

Mise à jour 2 :

brew list --full-name donne ces paquets :

autoconf
automake
blueutil
boost
cabal-install
cairo
cfssl
cmake
coreutils
doxygen
editorconfig
erlang
ffind
ffmpeg
flow
fontconfig
fontforge
freetype
gdbm
gettext
ghc
git
glib
go
gobject-introspection
graphicsmagick
harfbuzz
haskell-stack
highlight
icu4c
influxdb
jemalloc
jpeg
keybase
lame
libevent
libffi
libpng
libtermkey
libtiff
libtool
libuv
libvterm
libxml2
lua
mongodb
msgpack
nginx
node
openssl
openssl@1.1
pango
pcre
pixman
pkg-config
postgresql
protobuf
python
python3
rabbitmq
readline
reattach-to-user-namespace
redis
sqlite
the_silver_searcher
thefuck
tmux
unibilium
unixodbc
wxmac
x264
xvid
xz
yarn
z
zsh
josegonzalez/php/php54
neovim/neovim/neovim

Mise à jour 3 :

Ces points correspondent à la réponse de @Monomeeth :

  1. Quand cela se produit, un élément login apparaît dans le moniteur d'activité. (Forcer) Quitter le ferme également la fenêtre Terminal qui était bloquée. Fermer manuellement la fenêtre ne fait pas disparaître le processus login dans le moniteur d'activité.

  2. Le titre du terminal est Terminal — login — term big — ttys001 — 89x18 — 1, où term big est le nom des paramètres.

  3. Aucun processus sudo n'apparaît dans le moniteur d'activité. Je peux créer un processus sudo en ouvrant iTerm.app (qui utilise bash) et en exécutant sudo echo ok là-bas. Il ne peut pas être fermé, mais Forcer à quitter fonctionne et le tue :

    bash-3.2$ sudo echo ok Killed: 9

Mise à jour 4 :

Quand cela se produit, exécuter login depuis un shell toujours disponible fonctionne, tandis que le login dans les nouveaux shells semble se bloquer.

Mise à jour 5 :

J'ai récemment acquis un nouvel ordinateur portable (MacBook Pro 2017, sans Touch Bar) et le problème persiste.

J'ai également changé de shell : j'utilise maintenant fish avec une configuration assez basique. Je pense que cela exclut le shell comme étant le coupable.

Le système d'exploitation a aussi été mis à jour en 10.13.3 (17D47) High Sierra.

J'ai essayé d'installer le moins possible sur cette machine :

brew list —-full-names

coreutils 8.29
dnsmasq 2.78
faac 1.29.9.2
fdk-aac 0.1.5
ffmpeg 3.4.1
fish 2.7.1
freetype 2.9
gdbm 1.14.1_1
gettext 0.19.8.1
git 2.16.1
highlight 3.42
htop 2.0.2_2
icu4c 60.2
imagemagick 7.0.7-22
jemalloc 5.0.1
jpeg 9b
lame 3.100
libav 12.2
libogg 1.3.3
libpng 1.6.34
libtermkey 0.20
libtiff 4.0.9_1
libtool 2.4.6_1
libuv 1.19.1
libvorbis 1.3.5_1
libvpx 1.7.0
libvterm 681
libyaml 0.1.7
lua 5.3.4_2
luajit 2.0.5
mongodb 3.6.2
msgpack 2.1.5
neovim 0.2.2
node 9.5.0
openssl 1.0.2n
opus 1.2.1
parallel 20180122
pcre 8.41
pcre2 10.30
postgresql 10.2
python 2.7.14_3
python3 3.6.4_2
readline 7.0.3_1
ripgrep 0.7.1
ruby 2.5.0
sqlite 3.22.0
the_silver_searcher 2.1.0
thefuck 3.25_1
unibilium 1.2.1
x264 r2795
xvid 1.3.5
xz 5.2.3
youtube-dl 2018.02.08

Je ne sais pas ce que cela peut être maintenant. Les seules applications auxquelles je peux penser sont Divvy ou Apptivate car elles semblent toutes deux obsolètes. Voici l'intersection de ce qui était installé sur l'ancien vs le nouveau machine:

coreutils
ffmpeg
freetype
gdbm
gettext
git
highlight
icu4c
jemalloc
jpeg
lame
libpng
libtermkey
libtiff
libtool
libuv
libvterm
lua
mongodb
msgpack
node
openssl
pcre
postgresql
python
python3
readline
sqlite
the_silver_searcher
thefuck
unibilium
x264
xvid
xz

Mise à jour 6 :

Aussi, voici une capture d'écran :

capture d'écran

Mise à jour 7 :

Mon environnement ressemble typiquement à ceci :

Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.k60Nf5UBfq/Render
DISPLAY=/private/tmp/com.apple.launchd.6FMoWPSlJI/org.macosforge.xquartz:0
EDITOR=env VIRTUAL_ENV= nvim -u /Users/john-doe/.config/vim/vimrc -p
GNUTERM=X11
HOME=/Users/romeo
HOMEBREW_NO_EMOJI=1
HOMEBREW_PREFIX=/usr/local
LANG=en_GB.UTF-8
LESS=-RI
LESSHISTFILE=-
LOGNAME=romeo
LS_COLORS=di=00;31:ex=00;37:mi=00;41;30:tw=00;33
MANPATH=/usr/local/opt/coreutils/libexec/gnuman
PAGER=less
PATH=/Users/john-doe/.config/fisherman/re-search:/usr/local/opt/python/libexec/bin:/usr/local/opt/ruby/bin:/usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/MacGPG2/bin
PWD=/Users/romeo
SECURITYSESSIONID=186a8
SHELL=/usr/local/bin/fish
SHLVL=1
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.fQn5sHMuZP/Listeners
TERM=xterm-256color
TERM_PROGRAM=Apple_Terminal
TERM_PROGRAM_VERSION=400
TERM_SESSION_ID=D2AF7A50-8B41-4793-9201-8304A02C9B29
TMPDIR=/var/folders/15/zcyyfw_x7638z7vfg5zd85z40000gn/T/
USER=romeo
XDG_CACHE_HOME=/Users/john-doe/.cache
XDG_CONFIG_HOME=/Users/john-doe/.config
XPC_FLAGS=0x0
XPC_SERVICE_NAME=0

2 votes

Ceci pourrait être une suggestion simpliste, mais avez-vous essayé de contacter le support client d'Apple? Votre question n'a pas obtenu beaucoup d'attention depuis que vous l'avez postée, et leur équipe de support pourrait être au courant de ce problème. Ma seule autre suggestion serait de réinstaller MacOS. Cependant, étant donné que votre Mac est si récent, je ne sais pas si cela fonctionnerait.

1 votes

@klanomath terminé!

0 votes

Pour comprendre ce que fait le processus de connexion, sélectionnez-le dans le Moniteur d'activité et choisissez Échantillon de processus. Il en va de même pour les autres processus bloqués. Cependant, ce niveau de débogage peut ne pas être approprié pour une question et réponse sur StackExchange. Il peut être préférable de signaler un bogue à Apple en incluant le fichier d'échantillon, ou de trouver quelqu'un qui peut offrir un support pour diagnostiquer le problème à ce niveau. Voir developer.apple.com/bug-reporting

1voto

David Anderson Points 30783

La source du code de la commande login a été publiée par Apple. Le site Web est macOS 10.13.3 Source. Le seul téléchargement requis est system_cmds-790.30.1. Une fois téléchargé, le projet peut être facilement modifié pour construire uniquement la commande login. Le projet modifié et la commande login ont été placés sur GitHub à davidanderson61/system_cmds-10.13.3.

L'idée ici est de modifier login pour écrire des informations de débogage dans la Console. Cela aiderait à déterminer pourquoi la commande login reste bloquée. Les modifications pourraient être apportées par quiconque souhaitant participer. J'ai supposé que cela aurait été moi.

Installer la Commande de Débogage login.

  1. Sélectionnez la dernière version sur le site Web davidanderson61/system_cmds-10.13.3/releases.

  2. Téléchargez la commande de débogage login dans votre dossier Téléchargements. Sous "Assets", faites un clic droit sur login et sélectionnez "Télécharger le fichier lié sous forme de", puis sélectionnez "Enregistrer".

  3. Désactivez partiellement la Protection de l'Intégrité du Système (SIP). La commande est donnée ci-dessous. Avant d'entrer la commande, vous devrez démarrer sur un macOS Recovery, puis ouvrir une fenêtre Terminal.

    csrutil  enable  --without  fs
  4. Entrez la commande ci-dessous pour sauvegarder la commande login d'origine. Si login.orignal existe déjà, vous pouvez omettre cette étape.

    sudo  mv  /usr/bin/login  /usr/bin/login.original
  5. Entrez les commandes ci-dessous pour copier la commande de débogage login et définir les autorisations nécessaires.

    sudo  cp  ~/Downloads/login  /usr/bin/login
    sudo  chmod  104555  /usr/bin/login
  6. Activez la Protection de l'Intégrité du Système (SIP). Entrez la commande suivante. Ensuite, vous devriez redémarrer.

    sudo  csrutil  clear

Configurer l'Application Console

Voici les étapes pour configurer l'application Console afin d'afficher uniquement les messages de la commande login.

  1. Ouvrez l'application Console.

  2. Ajoutez une colonne PID, comme indiqué ci-dessous.

    g2

  3. Entrez login dans le champ de recherche.

    g3

    Tant que le champ de recherche est sélectionné, appuyez sur la touche Entrée. Le champ de recherche devrait changer pour afficher ce qui est montré ci-dessous.

    g8

  4. Changez Tout en Processus, comme indiqué ci-dessous.

    g4

  5. Changez Contient en Égaux, comme indiqué ci-dessous.

    g5

  6. Sélectionnez le bouton Enregistrer. Lorsque vous êtes invité pour "Enregistrer la recherche sous:", entrez Login, puis sélectionnez Enregistrer.

    g6

Les résultats devraient apparaître comme indiqué ci-dessous. La prochaine fois que vous ouvrirez l'application Console, vous n'aurez qu'à sélectionner le bouton "Login".

g7

Annexe

Comment le Dépôt GitHub a été Créé.

  1. Cliquez sur le fichier system_cmds.xcodeproj ouvert dans Xcode.

  2. Dans la barre de menu, sélectionnez Source Control->Créer des Dépôts Git....

  3. Dans la barre de menu, sélectionnez Produit->Schéma->Nouveau Schéma.... Ensuite, sélectionnez login comme Cible et Nom.

  4. Dans la barre de menu, sélectionnez Projet->Construire.

  5. Quittez Xcode.

  6. Connectez-vous à GitHub et créez un nouveau dépôt.

  7. En haut de la page de Configuration Rapide de votre dépôt GitHub, cliquez sur g1 pour copier l'URL du dépôt distant.

  8. Pour une fenêtre d'application Terminal, saisissez la commande suivante. Remplacez par l'URL copiée lors de l'étape précédente.

    git  remote  add  origin  
  9. Ouvrez le projet dans Xcode et dans la barre de menu, sélectionnez Source Control->Pousser....

Comment la Première Version a été Créée

  1. Dans une fenêtre d'application Terminal, saisissez les commandes suivantes.

    git  tag  -a  v1.0  -m  "Code source d'origine"
    git  push  origin  v1.0
  2. Copy la commande de login construite dans votre dossier Téléchargements.

  3. Depuis votre compte GitHub, créez une nouvelle version en tant que v1.0. Joignez ~/Downloads/login en tant que binaire.

1voto

rson Points 595

J'ai également rencontré ce problème lors de l'exécution de la console sbt dans emacs. Chaque fois que je sortais de la console sbt en tuant simplement la fenêtre au lieu de sortir de la console sbt "correctement" d'abord, cela provoquait un processus Java en attente même après la fermeture de la fenêtre, et empêchait d'une manière ou d'une autre la création de nouvelles sessions de terminal. J'ai forcé l'arrêt du processus Java depuis le moniteur d'activité, et le terminal en attente s'est effectivement ouvert, à la fois depuis emacs et dans un nouvel onglet.

Maintenant, je veille simplement à quitter correctement en utilisant la commande exit ou ctrl-d (ou ctrl-c ctrl-d dans emacs term/multi-term), puis je ferme la fenêtre.

0voto

user5795782 Points 1
  1. Vérifiez si votre processus reste bloqué pendant le login
  2. Jetez un coup d'œil sur le Moniteur d'activité et surveillez les processus root (c'est-à-dire nano, emacs, vim) que vous avez peut-être lancés et pas correctement arrêtés (plantage, terminal simplement fermé, etc.) et qui sont toujours en cours d'exécution.
  3. Tuez ce(s) processus et la connexion devrait fonctionner immédiatement.

0voto

Abundance Points 101

Juste ma petite contribution.

J'ai installé le package Terminus pour Sublime Text, ce qui me permet d'exécuter un terminal dans mon éditeur de texte.

Fermer immédiatement Sublime Text a permis à mon terminal de recommencer à fonctionner.

0 votes

Je ne pense pas que cela aide à répondre à la question. Est-ce que cela empêche le terminal de planter en l'exécutant à l'intérieur de Terminus ? Même si c'est le cas, il semble que vous résolvez un autre problème ici.

0 votes

Mon terminal habituel ne fonctionnait pas en raison de problèmes avec Sublime Text

0voto

daniel.j.wood Points 1

Pour ce que ça vaut, j'ai eu le même problème. Il se résolvait après le redémarrage, mais je voulais économiser le temps de le faire plusieurs fois par jour. Cela a commencé après avoir utilisé un environnement nodeJS particulier, j'ai donc ouvert le moniteur d'activité et j'ai remarqué un processus node en cours. En tuant cette instance, le problème a été résolu pour moi, donc si quelqu'un rencontre ce problème et a récemment commencé à travailler avec node ou npm localement, cela pourrait être votre problème.

0 votes

Était un processus "java" errant dans mon cas, mais en le tuant dans le Moniteur d'activité, le blocage du terminal s'est arrêté!

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X