34 votos

El inicio de sesión del terminal se cuelga

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

Funciona bien y luego, después de usarlo durante un tiempo, la apertura de un nuevo Terminal Windows no funciona porque login cuelga. Al reiniciar se soluciona el problema.

Este parece ser un problema que han tenido otras personas, así que ya he probado todas sus soluciones (de 1 y [2] ):

  1. Eliminación de ~/Library/Preferences/com.apple.Terminal.plist
  2. Configurar mi shell por defecto a otro shell (de /bin/zsh a /bin/sh o /bin/bash )
  3. Quitar o limpiar mi .profile , .zprofile , ... Esto no funciona y puedo validar que el problema se produce antes de que el shell sea invocado, porque si echo HEY como la primera línea de mi .zshenv esto ni siquiera se alcanza. Debe ser login causando los problemas. Edición de /etc/profile para añadir un eco en la parte superior tampoco aparece nada
  4. Cambiar la Run command: en la configuración de mi Terminal a algo como echo foo tampoco funciona (dejando Run inside shell marcado o desmarcado no cambia nada).

Otras notas:

  • Como [2] , ssh-add -K no persiste las claves entre los reinicios, algo con lo que nunca había tenido problemas.
  • La consola no muestra ningún error o advertencia sospechosa.
  • Abrir un nuevo Terminal 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 portátil, no he restaurado ninguna copia de seguridad, sólo he instalado algunas aplicaciones con brew install y brew cask install ).

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

¿Alguien tiene algún consejo?

Actualización:

Usando iTerm, pude obtener un shell estableciendo el comando de inicio como /bin/bash . Sin embargo, en esta cáscara, sudo no funciona. Se cuelga (sin mostrar el prompt) y ctrl-C y ctrl-D no hacen ningún trabajo cuando se cuelga.

Utilizando algunos otros programas tampoco funciona en este shell: node o /usr/local/bin/node ambos cuelgan. Por lo que sé, son los programas que están en /usr/local/bin .

Actualización 2:

brew list --full-name resultados 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 se corresponden con la respuesta de @Monomeeth:

  1. Cuando ocurre, un login el elemento sí aparece en el monitor de actividad. (Forzar) Al salir también se cierra la ventana de la Terminal que estaba colgada. Cerrar la ventana manualmente no hace que el login en el Monitor de Actividad.

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

  3. No hay sudo proceso que aparece en el Monitor de Actividad. Puedo crear un sudo abriendo iTerm.app (que utiliza bash) y ejecutando sudo echo ok allí. No se puede salir, pero forzar la salida funciona y lo mata:

    bash-3.2$ sudo echo ok Matado: 9

Actualización 4:

Cuando esto ocurre, correr login de una cáscara que todavía está disponible hace trabajo, mientras que el login en las cáscaras más nuevas parece colgarse.

Actualización 5:

Hace poco que tengo un nuevo portátil (MacBook Pro 2017, sin Touch Bar) y el problema persiste.

Yo también he cambiado de carcasa: Ahora estoy usando fish con una configuración bastante vainilla. Creo que eso descarta que el shell sea el culpable.

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

He tratado de 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 que se me ocurren son Divvy o Apptivate ya que ambos parecen anticuados. 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: screenshot

Actualización 7:

Mi env suele ser 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

14voto

Monomeeth Puntos 139

Como seguro que sabes, la resolució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 para usted.

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

Si el proceso que está colgando es realmente durante acceso Esto implica que el proceso todavía está esperando para crear una sesión de inicio de sesión. Asumiendo que este es el caso, entonces no habría tratado de iniciar el shell todavía.

Para confirmarlo, la próxima vez que experimente este problema inicie el Monitor de Actividad para comprobar si el shell se está ejecutando o si sólo ve un acceso proceso.

Una vez que hayas tenido la oportunidad de hacerlo, informa de lo que has encontrado.

NOTA:- Si tienes otros terminales abiertos, asegúrate de comprobar el proceso correspondiente. Mi opinión es que el colgando es el que tiene el mayor número de ID de proceso (PID).

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

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

3. Matar a sudo

Afirmas que reiniciar tu MBP siempre resuelve este problema.

Sin embargo, la próxima vez que tengas este problema (tal vez después de hacer lo que describí en el punto 1), me gustaría que intentaras matar a sudo desde el Monitor de Actividad.

Una vez que hayas probado esto, haznos saber qué sucede.

4. Intenta mover tus archivos .bash*

Es posible (por varias razones) que tengas un archivo .bash_profile en tu directorio de usuario y esto esté causando problemas intermitentes. Esto es algo de lo que puede no ser consciente, pero puede utilizar Automator para ejecutar un script que encuentre y mueva cualquier archivo .bash.

Aquí hay un ejemplo script para hacer esto:

cd ~

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

Este script mueve todos los archivos que empiezan por .bash en tu carpeta de inicio a una recién creada movido subcarpeta.

Después de ejecutar el script, comprueba esta carpeta y haznos saber si efectivamente tienes algún archivo en ella.

NOTA:- Puedes etiquetar la nueva subcarpeta como quieras. Para ello, basta con cambiar las dos apariciones de movido en el script a cualquier etiqueta que quieras usar.

[ACTUALIZACIÓN]

Algunas cosas más para probar.

5. Intente borrar los archivos *.asl

Si aún no lo ha hecho, intente borrar los archivos *.asl. Para ello, utilice lo siguiente:

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

NOTA:- Esto puede llevar algún tiempo, ya que se crea un nuevo shell. Cuando haya terminado, asegúrese de salir completamente del Terminal para que los cambios surtan efecto.

6. Modo seguro

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

  1. Apagar completamente el Mac
  2. Reinicie su Mac
  3. Pulse inmediatamente la tecla Shift clave y no lo hagas
  4. Deja de lado el Shift cuando vea la ventana de inicio de sesión (NOTA: Si tiene activado FileVault puede que tenga que iniciar la sesión dos veces).
  5. Una vez que su MBP se inicie, intente usar el Terminal y vea si todavía puede replicar el problema.
  6. Cuando termine, puede salir del modo seguro reiniciando su MBP de forma normal

7. Directorio abierto

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

6voto

Oskar Puntos 1242

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

En una instalación de MacOS de serie se obtienen 709 por usuario ( ulimit -u ) y 1064 procesos máximos ( sysctl -a | grep maxp )

Una forma fácil de aumentar estos límites es instalar Server.app desde la App Store y luego reiniciar. También puedes configurar el modo de rendimiento para obtener límites más altos.

Ya que no has descrito tu configuración (versión del sistema operativo y compilación), aquí tienes algunos consejos - asegúrate de comprobar si el SIP restringe tu capacidad para cambiar los archivos si lees algunos de los artículos más antiguos sobre cómo cambiar los límites sin recurrir a la instalación de server.app:

5voto

Zack Puntos 51

Yo también lo veo desde hace varios meses. Extremadamente frustrante. Lo único que lo arregla es reiniciar.

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

A veces los cuelgues de inicio de sesión ocurren después de interactuar con tmux.

He probado sin éxito todos los métodos recomendados.

No estoy seguro de que esté relacionado, pero un lsof -p LOGIN_PID muestra un archivo bastante masivo /private/var/db/dyld/dyld_shared_cache_x86_64h para el proceso de inicio de sesión colgado.

29/08/2017 Actualización:

Sigue teniendo el problema. A veces, cuando la máquina se pone en el mal estado, tengo abierto el terminal de Windows que ya se han registrado con éxito que puedo utilizar 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 Ya veo ls: write error emitido a stderr. Cuando ejecuto ls -al > /dev/null no se imprime nada en stderr.

4voto

Arran McDonald Puntos 11

Yo trataría de hacer deshabilitar SIP y dtrace login para encontrar la causa root (Para deshabilitar y volver a habilitar SIP, ver 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 dar un ejemplo de salida, acabo de descubrir que las cosas son mucho más simples de lo que pensaba. No hay necesidad de desactivar SIP, sólo copiar el inicio de sesión.

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

cp /usr/bin/login .
sudo ls

dar su contraseña. A continuación, haga

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

introduzca su nombre de usuario, presione enter

introduzca su contraseña, presione enter

introduzca 'exit', pulse enter

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

Puede copiar el contenido del archivo en el portapapeles de la siguiente manera

cat dtruss_login.txt | pbcopy

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

El segundo número entero de cada línea es el tiempo que duró la llamada.

Por supuesto, sería genial si se pudiera 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 tiene una idea de cómo 'dtruss login' cuando el terminal se cuelga?

4voto

jcollum Puntos 219

Es importante tratar el problema real y no sólo el síntoma. Así que pruebe las siguientes sugerencias y actualícelas para que en base a eso pueda sugerir otros remedios también.

  1. ¿A qué usuario pertenece el terminal? :
    Mi primera corazonada es que esto puede estar relacionado con cómo está configurada tu cuenta. Si la terminal está tratando de acceder a los recursos o directorios que sólo el usuario administrador puede (si la suya es una cuenta que no es de administrador), entonces eso puede llevar al estado de congelación - no permitiéndole acceder a la terminal. Por lo tanto, asegúrese de que cuando inicie una sesión de terminal, ésta sea local para su usuario y no para otro. El hecho de que no puedas crear un proceso sudo, me apunta a esta dirección.

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

  3. Pulsar Comando-C :
    Esto interrumpirá si el terminal está intentando ejecutar un programa en segundo plano. Pruébalo un par de veces. Observe si ve alguna salida

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

  5. Consigue un caparazón alternativo :
    Si quieres probar un caparazón diferente durante unos días, sus comportamientos a veces pueden ayudarte a entender el problema con el Terminal dado si actúan de una manera determinada. Comprueba estos enlaces de abajo para ver las alternativas

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

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

  • ¿Cómo se inicia la sesión de terminal? ¿Es a través de Spotlight o de un icono del 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 se inicia una sesión de terminal/ Windows.

  • ¿Para qué utilizas habitualmente tu terminal? Si la mayor parte de su uso es sólo para comandos relacionados con git, yo sugeriría usar algo como Github para Mac ya que normalmente puedes hacer la mayoría de las cosas desde allí.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X