El inicio de sesión de la terminal se cuelga

Tengo un problema extraño en mi nueva MacBook Pro (finales de 2016, barra táctil).

Funciona bien y luego, después de usarlo por un tiempo, abrir nuevas ventanas de Terminal no funciona porque se logincuelga. Reiniciar soluciona el problema.

Esto parece ser un problema que otras personas han tenido, así que ya probé todas sus soluciones (desde1 y [2] ):

  1. eliminando~/Library/Preferences/com.apple.Terminal.plist
  2. Configurando mi shell predeterminado a otro shell (de /bin/zsha /bin/sho /bin/bash)
  3. Quitar o limpiar mi .profile, .zprofile, ... Esto no funciona y puedo validar que el problema ocurre incluso antes de que se invoque el shell, porque si yo echo HEYcomo la primera línea de mi .zshenv, esto ni siquiera se alcanza. Debe estar logincausando los problemas. La edición /etc/profilepara agregar un eco en la parte superior tampoco muestra nada
  4. Cambiar la Run command:configuración en la configuración de mi terminal a algo como echo footampoco funciona (dejar Run inside shellmarcado o sin marcar no cambia nada).

Otras notas:

  • Al igual que [2] , ssh-add -Kno persisten las claves entre reinicios, algo con lo que nunca tuve problemas antes.
  • La consola no muestra ningún error o advertencia sospechosa.
  • Abrir una nueva Terminalventana parece crear un archivo tty ( /dev/ttys<number>).
  • Cuando esto ocurre, no importa si uso Terminal.app o iTerm.app
  • Tengo una instalación bastante limpia (acabo de recibir mi computadora portátil, no restauré ninguna copia de seguridad, solo instalé algunas aplicaciones con brew instally brew cask install).

Esto es realmente difícil de depurar porque no puedo reproducirlo y, a menudo, no puedo abrir una nueva terminal para siquiera tratar de averiguar qué está pasando.

¿Alguien tiene algún consejo?

Actualizar:

Usando iTerm, pude obtener un shell configurando el comando de inicio en /bin/bash. En este caparazón, sin embargo, sudono funciona. Se cuelga (sin mostrar el aviso) y ctrl-Cno ctrl-Dfunciona cuando se cuelga.

El uso de algunos otros programas tampoco funciona en este shell: nodeo /usr/local/bin/nodeambos se cuelgan. Por lo que puedo decir, son programas que están en formato /usr/local/bin.

Actualización 2:

brew list --full-nameresultados en estos paquetes:

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

Actualización 3:

Estos puntos están en correspondencia con la respuesta de @Monomeeth:

  1. Cuando sucede, un loginelemento aparece en el monitor de actividad. (Forzar) Salir también cierra la ventana de Terminal que estaba colgada. Cerrar la ventana manualmente no hace que el loginproceso desaparezca en el Monitor de actividad.

  2. El título del terminal es Terminal — login — term big — ttys001 — 89x18 — ⌘1, donde term bigestá el nombre de la configuración.

  3. No aparece ningún sudoproceso en el Monitor de actividad. Puedo crear un sudoproceso abriendo iTerm.app (que usa bash) y ejecutándolo sudo echo okallí. No puede ser Quit, pero Force Quit funciona y lo mata:

    bash-3.2$ sudo echo ok Muertos: 9

Actualización 4:

Cuando sucede, ejecutar logindesde un shell que todavía está disponible funciona , mientras que loginen los shells más nuevos parece bloquearse.

Actualización 5:

Recientemente obtuve una computadora portátil nueva (MacBook Pro 2017, sin Touch Bar) y el problema persiste.

También cambié shells: ahora estoy usando fishuna configuración bastante vainilla. Creo que eso descarta que el caparazón sea el culpable.

El sistema operativo también se ha actualizado a 10.13.3 (17D47) High Sierra.

He intentado instalar lo menos posible en esta máquina:

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

No estoy seguro de qué puede ser esto ahora. Las únicas aplicaciones en las que puedo pensar son Divvyo Apptivateya que ambas parecen desactualizadas. Esta es la intersección de lo que se instaló en la máquina antigua frente a la nueva:

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

Actualización 6:

Además, aquí hay una captura de pantalla:captura de pantalla

Actualización 7:

Mi env normalmente se ve así:

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
Esta podría ser una sugerencia poco convincente, pero ¿ha intentado ponerse en contacto con el servicio de atención al cliente de Apple? Su pregunta no ha recibido mucha atención desde que la publicó, y es posible que su personal de soporte haya oído hablar de este problema. Mi única otra sugerencia sería reinstalar MacOS. Sin embargo, dado que su Mac es tan nueva, no sé si esto funcionaría.
@klanomath hecho!
Para averiguar qué está haciendo el inicio de sesión, selecciónelo en Monitor de actividad y elija Proceso de muestra. Lo mismo ocurre con otros procesos que están colgados. Sin embargo, este nivel de depuración puede no ser adecuado para una sesión de preguntas y respuestas de StackExchange. Puede ser mejor enviar un informe de error a Apple, incluido el archivo de muestra, o encontrar a alguien que pueda ofrecer asistencia para diagnosticar el problema en este nivel. Consulte developer.apple.com/bug-reporting
¿Cuánto tiempo se cuelga? ¿Has probado a dejarlo funcionando durante diez minutos? ¿Está su máquina vinculada a una red de Open Directory? En particular, el inicio de sesión debe obtener su información de usuario y, si se encuentra en una red OD con un servidor de directorio ocupado o que no responde, la respuesta podría demorar un par de minutos; otros programas también obtienen información del usuario y podrían sufrir este problema.
No he intentado esperar más tiempo, lo intentaré la próxima vez. No estoy vinculado a una red de Open Directory, estos errores ocurren también cuando no estoy en ninguna red.
Todavía tengo este problema. También en mi nuevo macbook 2017 sin Touch Bar. No he instalado casi nada y estoy usando un shell diferente ( fishcon una configuración bastante vainilla), así que realmente no puedo decir qué es.
Si cree que el problema está en el comando de inicio de sesión, ¿estaría dispuesto a usar un comando de inicio de sesión que escriba mensajes de depuración en la consola? En otras palabras, tome el código fuente del comando de inicio de sesión, agregue el código de depuración, compile y vincule, luego reemplace su comando de inicio de sesión con el nuevo.
A mí también me afecta esto (y cada vez es más frecuente...)
Por cierto: cerrar mi sesión no soluciona el problema, solo reiniciarlo.
Ayudé a alguien el otro día con un problema que se parecía mucho a este (quizás idéntico). Un par de puntos de datos de esa sesión de depuración, en caso de que sea útil para alguien (no sé si esto se aplica a usted cuando obtenga esto, pero es lo que vi): (1) parecía que había algo extraño con pseudo-terminales en general -- en particular, me di cuenta de que ps -efimprimiría un montón de procesos, pero solo aquellos sin una terminal asignada; cd /dev; echo tty*funcionó, pero ls -l tty*colgaría... ls -l ttys?funcionó, ls -l ttys???colgaría.
(2) hubo algunos sudoprocesos colgados entre la lista de procesos no asociados a terminales ( ??en pssalida), y nodese estaban utilizando. Menciono esto porque veo ambos nodey sudoen la pregunta. No estoy seguro de si esto es algo relevante, o solo una coincidencia, pero pensé en mencionarlo.
Ah, sí, y esto se sigue del punto (1) anterior, pero solo como un punto de datos adicional: ps -fp $$desde un shell que de otro modo funcionaba, tampoco respondía. No probé una psejecución de formato personalizado, pero probar uno que excluya el ttycampo podría ser algo interesante. Ah, y reiniciar solucionó (al menos temporalmente) el problema en la máquina donde vi esto. :-/

Respuestas (12)

Como estoy seguro de que sabe, la solución de problemas es un proceso de eliminación y, a menudo, requiere un poco de paciencia. Me gustaría probar algunas cosas para tratar de llegar al fondo de esto por usted.

1. Confirme que se cuelga durante el inicio de sesión

Si el proceso en el que está colgado es realmente durante el inicio de sesión , esto implica que el proceso todavía está esperando para crear una sesión de inicio de sesión. Suponiendo que este sea el caso, entonces no habría intentado iniciar el shell todavía.

Para confirmar esto, la próxima vez que experimente este problema, inicie el Monitor de actividad para verificar si el shell se está ejecutando o si solo ve un proceso de inicio de sesión .

Una vez que haya tenido la oportunidad de hacer esto, informe de nuevo con lo que encontró.

NOTA: - Si tiene otros terminales abiertos, asegúrese de estar verificando el proceso correspondiente. Supongo que el proceso de bloqueo es el que tiene el número de ID de proceso (PID) más alto.

2. ¿Cuál es el título de la Terminal?

La próxima vez que tenga este problema, ¿puede tomar nota de cuál es el título de la ventana de Terminal e informarlo?

3. Mata a sudo

Usted afirma que reiniciar su MBP siempre resuelve este problema.

Sin embargo, la próxima vez que tenga este problema (quizás después de hacer lo que describí en el punto 1 anterior), me gustaría que intente eliminar sudo del Monitor de actividad.

Una vez que haya probado esto, háganos saber lo que sucede.

4. Intenta mover tus archivos .bash*

Es posible (por varias razones) que tenga un archivo .bash_profile en su directorio de usuario y esto esté causando problemas intermitentes. Esto es algo de lo que quizás ni siquiera esté al tanto, pero puede usar Automator para ejecutar un script que encuentre y mueva cualquier archivo .bash.

Aquí hay un script de ejemplo para hacer esto:

cd ~

mkdir moved
for F in .bash*
do
    mv $F moved
done

Este script mueve todos los archivos que comienzan con .bash en su carpeta de inicio a una subcarpeta movida recién creada.

Después de ejecutar el script, verifique esta carpeta e infórmenos si de hecho tiene algún archivo.

NOTA: - Puede etiquetar la nueva subcarpeta como desee. Para hacerlo, simplemente cambie las dos apariciones de movido en el script a cualquier etiqueta que desee usar.

[ACTUALIZAR]

Algunas cosas más para probar.

5. Intenta borrar los archivos *.asl

Si aún no lo ha hecho, intente borrar los archivos *.asl. Para hacer esto usa lo siguiente:

sudo rm -rf /private/var/log/asl/*.asl

NOTA:- Esto puede llevar algún tiempo ya que crea un nuevo shell. Cuando termine, asegúrese de salir por completo de la Terminal para que los cambios surtan efecto.

6. Modo seguro

¿Notas alguna diferencia en el comportamiento cuando inicias tu MBP en modo seguro? Para iniciar en modo seguro:

  1. Apaga completamente tu Mac
  2. Reinicia tu Mac
  3. Inmediatamente presione la Shifttecla y manténgala presionada
  4. Suelte la Shifttecla cuando vea la ventana de inicio de sesión (NOTA: si tiene habilitado FileVault, es posible que deba iniciar sesión dos veces).
  5. Una vez que su MBP se inicie, intente usar Terminal y vea si aún puede replicar el problema.
  6. Cuando termine, puede salir del modo seguro reiniciando su MBP normalmente

7. Directorio abierto

Probablemente esto no aplique en tu caso ya que no lo mencionas, pero si estás conectado a una red Open Directory esto también podría estar causándote problemas. Por lo general, esto solo implicaría esperar entre 10 y 15 segundos, pero he visto informes de inicios de sesión de terminal que tardan cinco o más minutos en completarse en esta situación.

¡Gracias! Estoy usando zsh, e incluso con una identificación vacía .zshrc, .zprofile, .profile, etc no ocurre, además eso no explica por qué otros programas /usr/local/bintambién se bloquean, así que creo que 4. está fuera de la imagen. Volveré con la respuesta a las otras preguntas una vez que las tenga.
Se agregó una actualización con las respuestas a estas preguntas. loginparece ser el culpable, pero aún no explica por qué funciona en iTerm con bash.
He actualizado mi respuesta. Sin embargo, me acabo de dar cuenta de que no ha indicado cuánto tiempo ha intentado esperar a que se complete el inicio de sesión de la Terminal. Sería bueno saber si finalmente inicia sesión o si simplemente se cuelga indefinidamente.
@romeovs Solo me preguntaba, ¿alguna vez resolvió este problema?
no :( todavía estoy trabajando en eso. Sin embargo, ha comenzado a ocurrir mucho menos.
Muchas gracias por agregar muchas sugerencias precisas. Tuve el mismo problema, y ​​simplemente reiniciar mi Mac funcionó para mí :)
FWIW, nvim salió sin gracia y todavía se estaba ejecutando en segundo plano. Mis dotfiles también se sincronizaron con OneDrive. Matar el proceso de nvim me permitió volver a iniciar sesión. 🤷‍♂️

Esto parece perfecto para usted que excede los procesos máximos por usuario (o posiblemente los procesos máximos).

En una instalación de stock de macOS, obtiene 709 por usuario ( ulimit -u) y 1064 procesos máximos ( sysctl -a | grep maxp)

Una manera fácil de mejorarlos es instalar Server.app desde App Store y luego reiniciar. También puede configurar el modo de rendimiento para límites más altos.

Dado que no describió su configuración (versión y compilación del sistema operativo), aquí hay algunos consejos: asegúrese de verificar si SIP restringe su capacidad para cambiar archivos si lee algunos de los artículos anteriores sobre cómo cambiar los límites sin recurrir a la instalación del servidor. aplicación:

Excelente punto! Ni siquiera había considerado esto. :)
@Monomeeth tu respuesta es increíble. Un montón de cosas geniales en él.
@bmike ¿Hay alguna manera de verificar la cantidad total de procesos para verificar que este sea el caso? ¿Quizás incluso pueda reproducirlo creando procesos 709 entonces?
Basado en una instancia que vi de algo que parece ser el mismo problema, no creo que sea este. Lanzar nuevos procesos (desde un shell existente) funcionaría bien... pero stat'ing (a través de ls -l) la coincidencia de archivos /dev/ttys???(aparentemente) se bloquearía... Por supuesto, puede haber múltiples causas para síntomas similares, por lo que esto aún puede ser útil. respuesta, solo pensé en señalar lo que vi.

También he estado viendo esto durante varios meses. Extremadamente frustrante. Lo único que lo soluciona es reiniciar.

  • Mediados de 2015 MBP (sin barra táctil)
  • MacOS 10.12.6 beta

A veces, el inicio de sesión se bloquea después de interactuar con tmux.

He intentado sin éxito todos los enfoques recomendados.

No estoy seguro de si está relacionado, pero lsof -p LOGIN_PIDmuestra un archivo bastante grande /private/var/db/dyld/dyld_shared_cache_x86_64hpara el proceso de inicio de sesión bloqueado.

29/08/2017 Actualización:

Todavía tengo el problema. A veces, cuando la máquina está en mal estado, tengo ventanas de terminal abiertas que ya han iniciado sesión correctamente y que puedo usar para depurar.

Muchos comandos no se ejecutan correctamente, pero todos muestran un patrón de tener problemas para escribir (a stdout, estoy pensando). Por ejemplo, cuando ejecuto ls -al, veo ls: write erroremitido a stderr. Cuando ejecuto ls -al > /dev/null, no se imprime nada en stderr.

¿Tuviste suerte para resolver esto?
El problema se resolvió para mí desde que actualicé mi sistema operativo. Se ha corregido para algunas versiones menores y actualmente estoy ejecutando 10.13.3 (17D47).
¡También estoy ejecutando 10.13.3 (17D47)! Se ha vuelto menos frecuente, pero todavía ocurre a veces.

Es importante tratar el problema real y no solo el síntoma. Por lo tanto, pruebe las siguientes sugerencias y actualice, de modo que, en base a eso, también pueda sugerir más remedios.

  1. ¿Qué usuario es el propietario del terminal? :
    Mi primera corazonada es que esto puede estar relacionado con la configuración de su cuenta. Si la terminal intenta acceder a los recursos o directorios que solo el usuario administrador puede (si la suya no es una cuenta de administrador), eso puede conducir a un estado de congelación, lo que no le permite acceder a la terminal. Así que adelante y asegúrese de que cuando comience una sesión de terminal, sea local para su usuario y no para otro usuario. El hecho de que no puedas crear un proceso sudo me indica esta dirección.

  2. Escriba Control-Z o Comando-Z:
    esta secuencia de teclas de control suspende un programa que puede estar ejecutándose y le muestra un aviso de shell. Ahora puede ingresar el comando de trabajos para encontrar el nombre del programa, luego reiniciar el programa con fg o terminarlo con kill.

  3. Presiona Comando-C :
    Esto interrumpirá si la terminal está intentando ejecutar un programa en segundo plano. Inténtalo un par de veces. Tenga en cuenta si ve alguna salida

  4. Escriba Control-Q :
    si la salida se ha detenido con Control-S, esto la reiniciará.

  5. Obtenga un shell alternativo :
    si desea probar un shell diferente durante unos días, sus comportamientos a veces pueden ayudarlo a comprender el problema con Terminal dado si actúan de cierta manera. Consulte estos enlaces a continuación para ver alternativas

https://git-scm.com/downloads/guis
https://computers.tutsplus.com/tutorials/beyond-terminal-4-os-x-terminal-alternatives--mac-56217

Le ayudará saber lo siguiente, si no se ha mencionado ya:

  • ¿Cómo estás iniciando la sesión de terminal? ¿Es esto a través de Spotlight o un ícono de escritorio o de alguna otra manera?

  • ¿Qué hace el terminal cuando se cuelga? ¿Está en medio de la ejecución de un comando (el mismo comando cada vez antes de que se cuelgue) o simplemente se cuelga desde el momento en que inicia una sesión de terminal/Windows?

  • ¿Para qué sueles utilizar tu terminal? Si la mayoría de su uso es solo para comandos relacionados con git, sugeriría usar algo como Github para Mac , ya que generalmente puede hacer la mayoría de las cosas desde allí.

Ctrl-Z y Ctrl-C simplemente aparecen en la pantalla como ^Zy ^C, Ctrl-Q no hace nada. Normalmente abro el shell usando Comando-N en la Terminal. Soy programador a tiempo completo, así que básicamente uso la terminal para todo. El terminal se cuelga antes de que se ejecute nada (on login).
@romeovs ¿Qué pasa con el puntero 1 sobre cuál es su tipo de usuario? Una captura de pantalla con el problema también ayudaría. Gracias
Soy el usuario y administrador predeterminado en mi macbook.

Intentaría deshabilitar SIP y el inicio de sesión de dtrace para encontrar la causa principal (para deshabilitar y volver a habilitar SIP, consulte http://osxdaily.com/2015/10/05/disable-rootless-system-integrity-protection-mac -os-x/ )

$ csrutil status
System Integrity Protection status: disabled.
$ cp /usr/bin/login /tmp
$ sudo dtruss /tmp/login

Tratando de darle un resultado de ejemplo, acabo de descubrir que las cosas son mucho más simples de lo que pensaba. No es necesario deshabilitar SIP, solo copie el inicio de sesión.

dtuss devolverá las llamadas al sistema y podría dar una pista de dónde van las cosas mal.

cp /usr/bin/login .
sudo ls

da tu contraseña. Entonces hazlo

sudo dtruss -d -e ./login 2> dtruss_login.txt

ingrese su nombre de usuario, presione enter

ingrese su contraseña, presione enter

ingrese 'salir', presione enter

y finalmente cargue dtruss_login.txt, por ejemplo, https://gist.github.com/

Puede copiar el contenido del archivo al portapapeles de esta manera

cat dtruss_login.txt | pbcopy

Puede encontrar un inicio de sesión de ejemplo aquí: https://gist.github.com/wolframteetz/49c5188c9dfe68a3841fa18496679579

El segundo entero en cada línea es el tiempo que tomó la llamada.

Por supuesto, sería genial si pudieras ejecutar esto cuando el inicio de sesión se cuelga, pero si te entiendo bien, esto es imposible... tal vez tú o alguien más tenga una idea sobre cómo 'iniciar sesión dtruss' cuando la terminal se cuelga. ?

Ay. Esto parece mucho dolor por algo que sucede horas o días después de que comienza el inicio de sesión. ¿Puede limitar lo que dtrusspodría capturar y mostrar?
Si el inicio de sesión se bloquea en una llamada al sistema, lo cual es bastante probable, se lo mostrará. Si se cuelga entre llamadas al sistema, le mostrará cuál y le dará una pista sobre lo que realmente está sucediendo. por ejemplo, si se bloquea después de leer un determinado archivo de configuración mediante una llamada al sistema, lo más probable es que el error se produzca durante el análisis de esa configuración. Tienes que echarle un vistazo de cerca entonces. También podría estar relacionado con la red... quién sabe hasta que lo depure;)
El problema es que no puedo reproducir manualmente el problema hasta que sea demasiado tarde.
Luego ejecute el comando en un bucle "para siempre" y haga ">> dtruss_login.txt 2>&1" en lugar de "2> dtruss_login.txt". Una vez que aparezca el error, verá al final de la salida.
Finalmente pude obtener un registro de dtruss: gist.github.com/romeovs/6661ae0db77e57281b531676cc5dc007 Dado que el inicio de sesión se cuelga, esto nunca sale, así que ctrl-C'ed después de aproximadamente 10 segundos.
Ni siquiera ingresó su nombre de usuario... ¿entonces quiere decir que nunca recibió un aviso de inicio de sesión? Porque hasta ese momento, todo parece perfectamente normal en el dtruss... parece que simplemente hizo ctrl-c cuando se suponía que debía ingresar su nombre de usuario.
@ user2707001 Pero nunca necesito ingresar mi nombre de usuario, ¿es Terminal.app?
¿Qué quiere decir con que nunca necesita ingresar su nombre de usuario? Cuando escribe "iniciar sesión" en "Terminal.App", dice "iniciar sesión:" y necesita dar su nombre de usuario, presione cr. Luego dice "Contraseña:", y debe proporcionar su contraseña. Después de esto, obtendrá "Último inicio de sesión: ... y un aviso". Si lo "dtruss", la salida no se escribirá en la pantalla, por lo que no verá nada, pero aún debe ingresar su nombre de usuario, presionar enter, contraseña, presionar enter para completar el proceso de inicio de sesión y ver dónde cuelga . Solo repite lo que hiciste y, sin ver nada, ingresa usuario, ingresa, contraseña, ingresa.

El logincódigo fuente del comando ha sido publicado por Apple. El sitio web es macOS 10.13.3 Fuente . La única descarga requerida es system_cmds-790.30.1. Una vez descargado, el proyecto se puede modificar fácilmente para compilar solo el logincomando. El proyecto y el logincomando modificados se colocaron en GitHub en davidanderson61/system_cmds-10.13.3 .

La idea aquí es modificar loginpara escribir información de depuración en la consola. Esto ayudaría a determinar por qué se loginbloquea el comando. Las modificaciones las podrá realizar cualquier persona que desee participar. Supuse que este habría sido yo.

Instale loginel comando de depuración.

  1. Seleccione la versión más reciente del sitio web davidanderson61/system_cmds-10.13.3/releases .

  2. loginDescargue el comando de depuración en su Downloadscarpeta. En "Activos", haga clic con el botón derecho loginy seleccione "Descargar archivo vinculado como", luego seleccione "Guardar".

  3. Parcialmente, deshabilite la Protección de integridad del sistema (SIP). El comando se da a continuación. Antes de ingresar el comando, deberá iniciar en MacOS Recover , luego en una ventana de Terminal.

    csrutil  enable  --without  fs
    
  4. Ingrese el comando dado a continuación para guardar el logincomando original. Si login.orignalya existe, puede omitir este paso.

    sudo  mv  /usr/bin/login  /usr/bin/login.original
    
  5. Ingrese los comandos que se indican a continuación para copiar el logincomando de depuración y establecer los permisos adecuados.

    sudo  cp  ~/Downloads/login  /usr/bin/login
    sudo  chmod  104555  /usr/bin/login
    
  6. Habilite la protección de integridad del sistema (SIP). Ingrese el siguiente comando. Posteriormente, debe reiniciar.

    sudo  csrutil  clear
    

Configurar la aplicación de consola

A continuación se muestran los pasos para configurar la aplicación Consola para mostrar solo los mensajes del logincomando.

  1. Abra la aplicación Consola.
  2. Agregue una PIDcolumna, como se muestra a continuación.

    g2

  3. Ingrese loginen el campo de búsqueda.

    g3

    Mientras el campo de búsqueda tiene el foco, presione la returntecla. El campo de búsqueda debería cambiar a lo que se muestra a continuación.

    g8

  4. Cambie Anya Process, como se muestra a continuación.

    g4

  5. List Change Containsto Equals, como se muestra a continuación.

    g5

  6. Seleccione el Savebotón. Cuando se le solicite "Guardar búsqueda como:", ingrese Loginy luego seleccione Save.

    g6

Los resultados deben aparecer como se muestra a continuación. La próxima vez que abras la aplicación Consola, solo tendrás que seleccionar el botón "Iniciar sesión".

g7

Apéndice

Cómo se creó el repositorio de GitHub.

  1. Haga clic en el system_cmds.xcodeprojarchivo abierto en Xcode.
  2. En la barra de menú, seleccione Source Control->Create Git Repositories....
  3. En la barra de menú, seleccione Product->Scheme->New Scheme.... A continuación, seleccione logincomo destino y nombre.
  4. En la barra de menú, seleccione Project->Build.
  5. Sal de Xcode.
  6. Inicie sesión en GitHub y cree un nuevo repositorio.
  7. En la parte superior de la página de configuración rápida de su repositorio de GitHub, haga clic g1para copiar la URL del repositorio remoto.
  8. Para una ventana de la aplicación Terminal, ingrese el siguiente comando. Reemplace <remote repository URL>con la URL copiada en el paso anterior.

    git  remote  add  origin  <remote repository URL>
    
  9. Abra el proyecto en Xcode y desde la barra de menú, seleccione Source Control->Push....

Cómo se creó el primer lanzamiento

  1. Desde una ventana de la aplicación Terminal, ingrese los siguientes comandos.

    git  tag  -a  v1.0  -m  "Original source code"
    git  push  origin  v1.0
    
  2. Copie el logincomando construido en su Downloadscarpeta.

  3. Desde su cuenta de GitHub, cree una nueva versión como v1.0. Adjuntar ~/Downloads/logincomo un binario.

También tuve este problema mientras ejecutaba la consola sbt en emacs. Cada vez que salía de la consola sbt simplemente eliminando la ventana en lugar de salir de la consola sbt "muy bien" primero, provocaba que un proceso de Java se bloqueara incluso después de cerrar la ventana, y de alguna manera impedía que se crearan nuevas sesiones de terminal. Eliminé a la fuerza el proceso de Java desde el monitor de actividad, y la terminal colgante realmente comenzó, desde dentro de emacs, así como en una nueva pestaña.

Ahora, solo me aseguro de salir bien usando el comando exito ctrl-d(o ctrl-c ctrl-den emacs term/multi-term), luego elimino la ventana.

  1. Compruebe si su proceso se cuelga realmente durantelogin
  2. Eche un vistazo al Monitor de actividad y esté atento a los rootprocesos (es decir, nano, emacs, vim) que podría haber iniciado y que no se cerraron correctamente (bloqueo, acaba de cerrar la terminal, etc.) y que aún se están ejecutando.
  3. Elimine este (s) proceso (s) y el inicio de sesión debería funcionar de inmediato.

Solo mis dos centavos.

Instalé el paquete Terminus para Sublime Text, que me permite ejecutar la terminal dentro de mi editor de texto.

Cerrar Sublime Text inmediatamente permitió que mi terminal comenzara a funcionar nuevamente.

No creo que esto ayude a responder la pregunta. ¿Evita esto que la terminal se cuelgue ejecutándola dentro de Terminus? Incluso si lo hace, parece que está resolviendo otro problema aquí.
Mi terminal normal no funcionaba debido a algunos problemas con Sublime Text

FWIW, tuve este mismo problema. Se resolvería después de reiniciar, pero quería ahorrarme el tiempo de hacerlo varias veces al día. Comenzó después de usar un entorno de nodeJS en particular, así que entré en el monitor de actividad y noté un proceso de nodo en curso. Matar esa instancia resolvió el problema para mí, por lo que si alguien que experimentó esto recientemente comenzó a trabajar con node o npm localmente, ese podría ser su problema.

Fue un proceso "java" perdido en mi caso, ¡pero matarlo en el Monitor de actividad detuvo el bloqueo del terminal!

Matar una instancia de nvim extraviada solucionó esto para mí. Supongo que esto no es específico de nvim, pero algo que nvim en mi caso estaba haciendo causó problemas. Buscaría una aplicación de terminal huérfana fuera de lugar en el monitor de actividad y la mataría si encuentra una.

En mi caso, la nueva ventana de terminal se bloqueó después de mostrarse Last login: Tue Nov 24 18:31:39 on ttys001y se mostró el título de la ventana de terminal manpath.

Resulta que esto sucedió porque actualicé mi Xcode de 11.7 a 12.2 pero aún no había instalado las nuevas herramientas de línea de comandos. Después de iniciar Xcode y hacerlo, la terminal se abrió sin problemas ni demoras.