Estou com um problema estranho no meu novo MacBook Pro (final de 2016, barra de toque).
Funciona bem e, depois de usá-lo por um tempo, abrir novas janelas do Terminal não funciona porque login
trava. A reinicialização corrige o problema.
Este parece ser um problema que algumas pessoas já tiveram, então eu já tentei todas as soluções deles (de 1 e [2] ):
- Removendo
~/Library/Preferences/com.apple.Terminal.plist
- Definindo meu shell padrão para outro shell (de
/bin/zsh
para/bin/sh
ou/bin/bash
) - Removendo ou limpando meu
.profile
,.zprofile
... Isso não funciona e posso confirmar que o problema ocorre antes que o shell seja invocado, porque se eu,echo HEY
como primeira linha do meu,.zshenv
isso nem for alcançado. Deve estarlogin
causando os problemas. Editar/etc/profile
para adicionar um eco na parte superior também não mostra nada - Alterar a
Run command:
configuração na minha configuração do Terminal para algo comoecho foo
também não funciona (deixarRun inside shell
marcado ou desmarcado não muda nada).
Outras notas:
- Como [2] ,
ssh-add -K
não persiste chaves entre reinicializações, algo com o qual nunca tive problemas antes. - O console não mostra nenhum erro ou aviso suspeito.
- Abrir uma nova
Terminal
janela parece criar o arquivo tty (/dev/ttys<number>
). - Quando isso ocorre, não importa se eu uso o Terminal.app ou o iTerm.app
- Eu tenho uma instalação bem limpa (peguei meu laptop, não restaurei nenhum backup, apenas instalei alguns aplicativos com
brew install
ebrew cask install
).
Isso é realmente difícil de depurar, porque não consigo reproduzi-lo e, muitas vezes, não consigo abrir um novo terminal para tentar descobrir o que está acontecendo.
Alguém tem alguma dica?
Atualizar:
Usando o iTerm, consegui um shell configurando o comando start para /bin/bash
. Nesse shell, no entanto, sudo
não funciona. Ele trava (sem mostrar o prompt) e ctrl-C
e ctrl-D
fazer nenhum trabalho quando ele trava.
O uso de alguns outros programas também não funciona neste shell: node
ou /usr/local/bin/node
ambos travam. Tanto quanto eu posso dizer, é programas que estão em /usr/local/bin
.
Atualização 2:
brew list --full-name
resulta nestes pacotes:
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
Atualização 3:
Estes pontos estão em correspondência com a resposta de @ Monomeeth:
Quando isso acontece, um
login
item aparece no monitor de atividades. (Forçar) Sair também fecha a janela do Terminal que estava pendurada. Fechar a janela manualmente não faz ologin
processo desaparecer no Monitor de Atividade.O título do terminal é
Terminal — login — term big — ttys001 — 89x18 — ⌘1
ondeterm big
está o nome das configurações.Não há
sudo
processo aparecendo no Monitor de Atividade. Posso criar umsudo
processo abrindo o iTerm.app (que usa o bash) e executandosudo echo ok
lá. Não pode ser Quit, mas o Force Quit funciona e mata:bash-3.2 $ sudo echo ok Morto: 9
Atualização 4:
Quando isso acontece, a execução login
de uma concha que ainda está disponível faz o trabalho, enquanto o login
em conchas mais recentes parece travar.
Atualização 5:
Recentemente, adquiri um novo laptop (MacBook Pro 2017, sem Touch Bar) e o problema persiste.
Também troquei os shells: agora estou usando fish
uma configuração bonita de baunilha. Eu acho que isso descarta a casca como a culpada.
O sistema operacional também foi atualizado para 10.13.3 (17D47) High Sierra.
Eu tentei instalar o mínimo possível nesta 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
Não tenho certeza do que isso pode ser agora. Os únicos aplicativos em que consigo pensar são Divvy
ou Apptivate
já que ambos parecem desatualizados. Esta é a interseção do que foi instalado na máquina antiga versus a nova máquina:
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
Atualização 6:
Além disso, aqui está uma captura de tela:
Atualização 7:
Meu env normalmente se parece com isso:
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
Respostas:
Como tenho certeza de que você sabe, a solução de problemas é um processo de eliminação e geralmente requer muita paciência. Eu gostaria de tentar algumas coisas para tentar chegar ao fundo disso para você.
1. Confirme que ele trava durante o login
Se o processo em que ele está sendo suspenso é realmente durante o login , isso implica que o processo ainda está aguardando para criar uma sessão de login. Supondo que esse seja o caso, ele ainda não teria tentado iniciar o shell.
Para confirmar isso, na próxima vez em que ocorrer esse problema, inicie o Activity Monitor para verificar se o shell está em execução ou se você vê apenas um processo de login .
Depois de ter tido a chance de fazer isso, relate o que encontrou.
NOTA: - Se houver outros terminais abertos, verifique o processo correspondente. Meu palpite é que o processo de interrupção é aquele com o maior número de identificação do processo (PID).
2. Qual é o título do terminal?
Na próxima vez que você tiver esse problema, anote qual é o título da janela Terminal e informe-o novamente.
3. Mate o sudo
Você afirma que a reinicialização do seu MBP sempre resolve esse problema.
No entanto, na próxima vez que você tiver esse problema (talvez depois de fazer o que descrevi em 1 acima), gostaria que você tentasse matar o sudo no Activity Monitor.
Depois de tentar isso, informe-nos o que acontece.
4. Tente mover seus arquivos .bash *
É possível (por várias razões) que você tenha um arquivo .bash_profile no diretório do usuário e isso esteja causando problemas intermitentes. Isso é algo que você pode nem estar ciente, mas pode usar o Automator para executar um script que localiza e move qualquer arquivo .bash.
Aqui está um exemplo de script para fazer isso:
Esse script move todos os arquivos iniciados com .bash na sua pasta pessoal para uma subpasta movida recém-criada .
Depois de executar o script, verifique esta pasta e informe-nos se você possui algum arquivo.
NOTA: - Você pode rotular a nova subpasta como desejar. Para fazer isso, basta alterar as duas ocorrências de movidas no script para o rótulo que você deseja usar.
[ATUALIZAR]
Mais algumas coisas para tentar.
5. Tente limpar os arquivos * .asl
Se você ainda não o fez, tente limpar os arquivos * .asl. Para fazer isso, use o seguinte:
NOTA: - Isso pode levar algum tempo, pois cria um novo shell. Quando terminar, feche completamente o Terminal para que as alterações tenham efeito.
6. Modo de Segurança
Você percebe alguma diferença de comportamento ao iniciar o MBP no modo de segurança? Para inicializar no modo de segurança:
7. Diretório Aberto
Provavelmente, isso não se aplica ao seu caso, já que você não mencionou, mas se você estiver conectado a uma rede Open Directory, isso também poderá causar problemas. Geralmente, isso levaria apenas uma espera de 10 a 15 segundos, mas vi relatórios de logons de terminal levando cinco ou mais minutos para serem concluídos nessa situação.
fonte
zsh
, e mesmo com um vazio.zshrc
,.zprofile
,.profile
, etc id não ocorre, mais isso não explica por que outros programas/usr/local/bin
também pendurar, então eu acho 4. está fora de cogitação. Voltarei com a resposta para as outras perguntas assim que as receber.login
parece ser o culpado, mas ainda não explica por que funciona no iTermbash
.Parece um ajuste perfeito para você exceder o máximo de processos por usuário (ou possivelmente o máximo de processos).
Em uma instalação padrão do macOS, você obtém 709 por usuário (
ulimit -u
) e 1064 processos máximos (sysctl -a | grep maxp
)Uma maneira fácil de aumentar isso é instalar o Server.app na App Store e depois reiniciar. Você também pode definir o modo de desempenho para limites mais altos.
Como você não descreveu sua configuração (versão e compilação do SO), eis algumas dicas - verifique se o SIP restringe sua capacidade de alterar arquivos se você ler alguns dos artigos mais antigos sobre como alterar os limites sem recorrer à instalação do servidor. aplicativo:
fonte
Eu também tenho visto isso há vários meses. Extremamente frustrante. A única coisa que o corrige é a reinicialização.
Às vezes, o travamento do login ocorre após a interação com o tmux.
Tentei, sem sucesso, todas as abordagens recomendadas.
Não tenho certeza se está relacionado, mas um
lsof -p LOGIN_PID
mostra um arquivo bastante grande/private/var/db/dyld/dyld_shared_cache_x86_64h
para o processo de login interrompido.29/08/2017 Atualização:
Ainda está com o problema. Às vezes, quando a máquina fica em mau estado, tenho janelas de terminal abertas que já estão conectadas com êxito e que posso usar para depurar.
Muitos comandos não são executados corretamente, mas todos mostram um padrão de dificuldade em escrever (estou pensando no stdout). Por exemplo, quando corro
ls -al
, vejols: write error
emitido para stderr. Quando corrols -al > /dev/null
, nada é impresso em stderr.fonte
É importante tratar o problema real e não apenas o sintoma. Portanto, tente as seguintes sugestões e atualize-as com base no que também pode sugerir soluções adicionais.
Qual usuário possui o terminal? :
Meu primeiro palpite é que isso pode estar relacionado à forma como sua conta é configurada. Se o terminal estiver tentando acessar os recursos ou diretórios que somente o usuário administrador pode (se a sua conta não for de administrador), isso poderá levar ao estado de congelamento - não permitindo que você acesse o terminal. Portanto, vá em frente e garanta que, ao iniciar uma sessão de terminal, ela seja local para o usuário e não para outro usuário. O fato de você não poder criar um processo sudo está me apontando para essa direção.
Digite Control-Z ou Command-Z:
essa sequência de teclas de controle suspende um programa que pode estar em execução e fornece um prompt de shell. Agora você pode inserir o comando jobs para encontrar o nome do programa, depois reiniciar o programa com fg ou finalizá-lo com kill.
Pressione Command-C :
Isso interromperá se o terminal estiver tentando executar um programa em segundo plano. Experimente algumas vezes. Observe se você vê alguma saída
Digite Control-Q :
Se a saída foi interrompida com o Control-S, isso será reiniciado.
Obtenha um shell alternativo :
se você quiser experimentar um shell diferente por alguns dias, os comportamentos deles às vezes podem ajudá-lo a entender o problema do Terminal, dado que eles agem de uma certa maneira. Verifique estes links abaixo para alternativas
https://git-scm.com/downloads/guis
https://computers.tutsplus.com/tutorials/beyond-terminal-4-os-x-terminal-alternatives--mac-56217
Ajudará a saber o seguinte, se ainda não mencionado:
Como você está iniciando a sessão do terminal? Isso ocorre por meio de holofotes ou ícone da área de trabalho ou de alguma outra maneira?
O que o terminal está fazendo quando trava? É no meio da execução de um comando (o mesmo comando todas as vezes antes de travar) ou apenas no momento em que você inicia uma sessão / janelas do terminal.
Para que você costuma usar o seu terminal? Se a maior parte do seu uso for apenas para comandos relacionados ao git, sugiro usar Algo como o Github para Mac, pois geralmente você pode fazer a maioria das coisas a partir daí.
fonte
^Z
e^C
, Ctrl-Q não faz nada. Normalmente abro o shell usando o Command-N no Terminal. Sou programador em período integral, então uso o terminal para tudo basicamente. O terminal trava antes que qualquer coisa seja executada (ativadalogin
).Eu tentaria desativar o logon SIP e dtrace para encontrar a causa raiz (para desativar e reativar o SIP, consulte http://osxdaily.com/2015/10/05/disable-rootless-system-integrity-protection-mac -os-x / )
Tentando dar um exemplo de saída, acabei de descobrir que as coisas são muito mais simples do que eu pensava. Não há necessidade de desativar o SIP, basta copiar o login.
O dtuss retornará as chamadas do sistema e poderá dar uma dica de onde as coisas dão errado.
dê sua senha. Então faça
digite seu nome de usuário, pressione enter
digite sua senha, pressione enter
digite 'exit', pressione enter
e, finalmente, faça o upload do dtruss_login.txt para, por exemplo, https://gist.github.com/
Você pode copiar o conteúdo do arquivo para a área de transferência como este
Você pode encontrar um exemplo de login aqui: https://gist.github.com/wolframteetz/49c5188c9dfe68a3841fa18496679579
O segundo número inteiro em cada linha é o tempo que a chamada levou.
Claro, seria ótimo se você pudesse executar isso quando o login travar, mas se eu acertar, isso é impossível ... talvez você ou outra pessoa tenha uma idéia de como 'interromper o login' quando o terminal travar ?
fonte
dtruss
pode capturar e mostrar?O
login
código fonte do comando foi publicado pela Apple. O site é macOS 10.13.3 Source . O único download necessário ésystem_cmds-790.30.1
. Uma vez baixado, o projeto pode ser facilmente modificado para criar apenas ologin
comando. O projeto e ologin
comando modificados foram colocados no GitHub em davidanderson61 / system_cmds-10.13.3 .A idéia aqui é modificar
login
para gravar informações de depuração no console. Isso ajudaria a determinar por que ologin
comando trava. As modificações podem ser feitas para quem quiser participar. Eu assumi que isso teria sido eu.Instale o
login
comando Debug .Selecione a versão mais recente no site davidanderson61 / system_cmds-10.13.3 / releases .
Baixe o
login
comando debug para suaDownloads
pasta. Em "Ativos", clique com o botão direito do mouselogin
e selecione "Baixar arquivo vinculado como" e, em seguida, selecione "Salvar".Parcialmente, desative a proteção de integridade do sistema (SIP). O comando é dado abaixo. Antes de inserir o comando, você precisará inicializar no macOS Recover e , em seguida, na janela Terminal.
Digite o comando abaixo para salvar o
login
comando original . Selogin.orignal
já existir, você pode omitir esta etapa.Digite os comandos abaixo para copiar o
login
comando debug e definir as permissões apropriadas.Ative a proteção de integridade do sistema (SIP). Digite o seguinte comando. Depois, você deve reiniciar.
Configurar o aplicativo de console
Abaixo estão as etapas para configurar o aplicativo Console para mostrar apenas mensagens do
login
comando.Adicione uma
PID
coluna, como mostrado abaixo.Digite
login
no campo Pesquisar.Enquanto o campo Pesquisar estiver focado, pressione a returntecla O campo Pesquisar deve mudar para o que é mostrado abaixo.
Mude
Any
paraProcess
, como mostrado abaixo.Lista Altere
Contains
paraEquals
, como mostrado abaixo.Selecione o
Save
botão Quando solicitado "Salvar pesquisa como:", digiteLogin
e selecioneSave
.Os resultados devem aparecer como mostrado abaixo. Da próxima vez que você abrir o aplicativo Console, você terá apenas que selecionar o botão "Login".
Apêndice
Como o repositório do GitHub foi criado.
system_cmds.xcodeproj
arquivo aberto no Xcode.Source Control->Create Git Repositories...
.Product->Scheme->New Scheme...
. Em seguida, selecionelogin
como destino e nome.Project->Build
.Para uma janela de aplicativo do Terminal, digite o seguinte comando. Substitua
<remote repository URL>
pelo URL copiado na etapa anterior.Abra o projeto no Xcode e, na barra de menus, selecione
Source Control->Push...
.Como o primeiro lançamento foi criado
Na janela do aplicativo Terminal, digite os seguintes comandos.
Copie o
login
comando incorporado para suaDownloads
pasta.Na sua conta do GitHub, crie uma nova versão como
v1.0
. Anexar~/Downloads/login
como um binário.fonte
Eu também tive esse problema ao executar o console sbt no emacs. Sempre que eu saía do console sbt apenas matando a janela em vez de sair do console sbt "muito bem" primeiro, fazia com que um processo java travasse mesmo após o fechamento da janela e, de alguma forma, impedia a criação de novas sessões de terminal. Eu forcei o processo java a partir do monitor de atividades e o terminal suspenso realmente foi iniciado, no emacs e em uma nova guia.
Agora, apenas saio bem usando o comando
exit
ouctrl-d
(ouctrl-c ctrl-d
no emacsterm/multi-term
) e depois mato a janela.fonte
login
root
processos (por exemplo, nano, emacs, vim) que você pode ter iniciado e não encerrado corretamente (travamento, acabou de matar o terminal etc.) e que ainda estão em execução.fonte
Apenas meus dois centavos.
Instalei o pacote Terminus para texto sublime, que me permite executar o terminal no meu editor de texto.
O fechamento do texto sublime imediatamente permitiu que meu terminal voltasse a funcionar.
fonte
FWIW, eu tive esse mesmo problema. Isso resolveria após a reinicialização, mas eu queria economizar tempo fazendo isso várias vezes ao dia. Tudo começou após o uso de um ambiente nodeJS específico, então entrei no monitor de atividades e notei um processo do nó em andamento. Matar essa instância resolveu o problema para mim; portanto, se alguém experimentando isso recentemente começou a trabalhar com o nó ou o npm localmente, esse poderia ser o seu problema.
fonte
Matar uma instância nvim perdida corrigiu isso para mim. Suponho que isso não seja específico do nvim, mas algo que o nvim no meu caso estava fazendo causou problemas. Eu procuraria um aplicativo de terminal órfão fora do lugar no monitor de atividades e o mataria se encontrasse um.
fonte