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 login
cuelga. Reiniciar soluciona el problema.
Esto parece ser un problema que otras personas han tenido, así que ya probé todas sus soluciones (desde1 y [2] ):
~/Library/Preferences/com.apple.Terminal.plist
/bin/zsh
a /bin/sh
o /bin/bash
).profile
, .zprofile
, ... Esto no funciona y puedo validar que el problema ocurre incluso antes de que se invoque el shell, porque si yo echo HEY
como la primera línea de mi .zshenv
, esto ni siquiera se alcanza. Debe estar login
causando los problemas. La edición /etc/profile
para agregar un eco en la parte superior tampoco muestra nadaRun command:
configuración en la configuración de mi terminal a algo como echo foo
tampoco funciona (dejar Run inside shell
marcado o sin marcar no cambia nada).ssh-add -K
no persisten las claves entre reinicios, algo con lo que nunca tuve problemas antes.Terminal
ventana parece crear un archivo tty ( /dev/ttys<number>
).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 siquiera tratar de averiguar qué está pasando.
¿Alguien tiene algún consejo?
Usando iTerm, pude obtener un shell configurando el comando de inicio en /bin/bash
. En este caparazón, sin embargo, sudo
no funciona. Se cuelga (sin mostrar el aviso) y ctrl-C
no ctrl-D
funciona cuando se cuelga.
El uso de algunos otros programas tampoco funciona en este shell: node
o /usr/local/bin/node
ambos se cuelgan. Por lo que puedo decir, son programas que están en formato /usr/local/bin
.
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
Estos puntos están en correspondencia con la respuesta de @Monomeeth:
Cuando sucede, un login
elemento 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 login
proceso desaparezca en el Monitor de actividad.
El título del terminal es Terminal — login — term big — ttys001 — 89x18 — ⌘1
, donde term big
está el nombre de la configuración.
No aparece ningún sudo
proceso en el Monitor de actividad. Puedo crear un sudo
proceso abriendo iTerm.app (que usa bash) y ejecutándolo sudo echo ok
allí. No puede ser Quit, pero Force Quit funciona y lo mata:
bash-3.2$ sudo echo ok Muertos: 9
Cuando sucede, ejecutar login
desde un shell que todavía está disponible funciona , mientras que login
en los shells más nuevos parece bloquearse.
Recientemente obtuve una computadora portátil nueva (MacBook Pro 2017, sin Touch Bar) y el problema persiste.
También cambié shells: ahora estoy usando fish
una 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 Divvy
o Apptivate
ya 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
Además, aquí hay una captura de pantalla:
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
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:
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.
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/bin
tambié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.login
parece ser el culpable, pero aún no explica por qué funciona en iTerm con bash
.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:
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.
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_PID
muestra un archivo bastante grande /private/var/db/dyld/dyld_shared_cache_x86_64h
para 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 error
emitido a stderr. Cuando ejecuto ls -al > /dev/null
, no se imprime nada en stderr.
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.
¿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.
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.
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
Escriba Control-Q :
si la salida se ha detenido con Control-S, esto la reiniciará.
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í.
^Z
y ^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
).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. ?
dtruss
podría capturar y mostrar?El login
có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 login
comando. El proyecto y el login
comando modificados se colocaron en GitHub en davidanderson61/system_cmds-10.13.3 .
La idea aquí es modificar login
para escribir información de depuración en la consola. Esto ayudaría a determinar por qué se login
bloquea el comando. Las modificaciones las podrá realizar cualquier persona que desee participar. Supuse que este habría sido yo.
login
el comando de depuración.Seleccione la versión más reciente del sitio web davidanderson61/system_cmds-10.13.3/releases .
login
Descargue el comando de depuración en su Downloads
carpeta. En "Activos", haga clic con el botón derecho login
y seleccione "Descargar archivo vinculado como", luego seleccione "Guardar".
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
Ingrese el comando dado a continuación para guardar el login
comando original. Si login.orignal
ya existe, puede omitir este paso.
sudo mv /usr/bin/login /usr/bin/login.original
Ingrese los comandos que se indican a continuación para copiar el login
comando de depuración y establecer los permisos adecuados.
sudo cp ~/Downloads/login /usr/bin/login
sudo chmod 104555 /usr/bin/login
Habilite la protección de integridad del sistema (SIP). Ingrese el siguiente comando. Posteriormente, debe reiniciar.
sudo csrutil clear
A continuación se muestran los pasos para configurar la aplicación Consola para mostrar solo los mensajes del login
comando.
Agregue una PID
columna, como se muestra a continuación.
Ingrese login
en el campo de búsqueda.
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.
Cambie Any
a Process
, como se muestra a continuación.
List Change Contains
to Equals
, como se muestra a continuación.
Seleccione el Save
botón. Cuando se le solicite "Guardar búsqueda como:", ingrese Login
y luego seleccione Save
.
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".
system_cmds.xcodeproj
archivo abierto en Xcode.Source Control->Create Git Repositories...
.Product->Scheme->New Scheme...
. A continuación, seleccione login
como destino y nombre.Project->Build
.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>
Abra el proyecto en Xcode y desde la barra de menú, seleccione Source Control->Push...
.
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
Copie el login
comando construido en su Downloads
carpeta.
Desde su cuenta de GitHub, cree una nueva versión como v1.0
. Adjuntar ~/Downloads/login
como 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 exit
o ctrl-d
(o ctrl-c ctrl-d
en emacs term/multi-term
), luego elimino la ventana.
login
root
procesos (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.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.
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.
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 ttys001
y 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.
NoahL
romeovs
Página de Chris
Página de Chris
romeovs
romeovs
fish
con una configuración bastante vainilla), así que realmente no puedo decir qué es.david anderson
julien_c
julien_c
lindes
ps -ef
imprimiría un montón de procesos, pero solo aquellos sin una terminal asignada;cd /dev; echo tty*
funcionó, perols -l tty*
colgaría...ls -l ttys?
funcionó,ls -l ttys???
colgaría.lindes
sudo
procesos colgados entre la lista de procesos no asociados a terminales (??
enps
salida), ynode
se estaban utilizando. Menciono esto porque veo ambosnode
ysudo
en la pregunta. No estoy seguro de si esto es algo relevante, o solo una coincidencia, pero pensé en mencionarlo.lindes
ps -fp $$
desde un shell que de otro modo funcionaba, tampoco respondía. No probé unaps
ejecución de formato personalizado, pero probar uno que excluya eltty
campo podría ser algo interesante. Ah, y reiniciar solucionó (al menos temporalmente) el problema en la máquina donde vi esto. :-/