У меня странная проблема с моим новым MacBook Pro (конец 2016 года, сенсорная панель).
Он работает нормально, а затем, после некоторого использования, открытие новых окон терминала не работает, потому что login
зависает. Перезагрузка устраняет проблему.
Похоже, что это проблема некоторых других людей, поэтому я уже испробовал все их решения (из 1 и [2] ):
- Удаление
~/Library/Preferences/com.apple.Terminal.plist
- Установка моей оболочки по умолчанию для другой оболочки (от
/bin/zsh
до/bin/sh
или/bin/bash
) - Удаление или очистка мой
.profile
,.zprofile
... Это не работает , и я могу подтвердить , что проблема возникает перед оболочкой даже вызывается, потому что если я вecho HEY
качестве первой линии моего.zshenv
это еще не дошло. Это должно бытьlogin
причиной проблем. Редактирование/etc/profile
для добавления эха вверху также ничего не показывает - Изменение
Run command:
настройки в моем терминале конфигурации на что-то подобноеecho foo
также не работает (если оставитьRun inside shell
флажок или не проверено, ничего не изменится).
Другие заметки:
- Как и в [2] ,
ssh-add -K
не сохраняется ключей между перезагрузками, с чем у меня никогда не было проблем. - Консоль не показывает никаких подозрительных ошибок или предупреждений.
- Открытие нового
Terminal
окна создает файл tty (/dev/ttys<number>
). - Когда это происходит, не имеет значения, использую ли я Terminal.app или iTerm.app
- У меня довольно чистая установка (только что получил свой ноутбук, не восстановил никаких резервных копий, просто установил некоторые приложения с помощью
brew install
иbrew cask install
).
Это действительно трудно отладить, потому что я не могу воспроизвести его, и часто я не могу открыть новый терминал, чтобы даже попытаться выяснить, что происходит.
У кого-нибудь есть советы?
Обновить:
Используя iTerm, я смог получить оболочку, установив команду запуска в /bin/bash
. В этой оболочке, однако, sudo
не работает. Он виснет (без показа подсказки) и ctrl-C
и ctrl-D
не делать никакой работы , когда он виснет.
Использование некоторых других программ также не работает в этой оболочке: node
или /usr/local/bin/node
оба зависают. Насколько я могу судить, это программы, которые в /usr/local/bin
.
Обновление 2:
brew list --full-name
Результаты в этих пакетах:
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
Обновление 3:
Эти пункты соответствуют ответу @ Monomeeth:
Когда это происходит,
login
элемент отображается в мониторе активности. (Force) Выход из него также закрывает окно терминала, которое висело. Закрытие окна вручную не делаетlogin
процесс уходит в Activity Monitor.Заголовок терминала
Terminal — login — term big — ttys001 — 89x18 — ⌘1
, гдеterm big
имя настройки.В
sudo
мониторе активности нет процессов. Я могу создатьsudo
процесс, открыв iTerm.app (который использует bash) и запустив егоsudo echo ok
там. Это не может быть Quit, но Force Quit работает и убивает его:bash-3.2 $ sudo echo ok Убит: 9
Обновление 4:
Когда это происходит, работает login
из оболочки, которая все еще доступна , работает, в то время как login
в новых оболочках, кажется, зависает.
Обновление 5:
Недавно я приобрел новый ноутбук (MacBook Pro 2017, без сенсорной панели), и проблема сохраняется.
Я также переключил оболочки: теперь я использую fish
довольно ванильный конфиг. Я думаю, что исключает оболочку как виновника.
ОС также была обновлена до 10.13.3 (17D47) High Sierra.
Я попытался установить как можно меньше на эту машину:
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
Не уверен, что это может быть сейчас. Единственные приложения, о которых я могу думать, - Divvy
или, Apptivate
так как они оба кажутся устаревшими. Это пересечение того, что было установлено на старой против новой машины:
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
Обновление 6:
Обновление 7:
Мой env обычно выглядит так:
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
Ответы:
Как я уверен, вы знаете, что устранение неполадок является процессом устранения и часто требует немало терпения. Я хотел бы попробовать несколько вещей, чтобы попытаться добраться до сути этого для вас.
1. Подтвердите, что он зависает при входе
Если процесс, на котором он висит, действительно во время входа в систему , это означает, что процесс все еще ожидает создания сеанса входа в систему. Если предположить, что это так, то он еще не попытался бы запустить оболочку.
Чтобы подтвердить это, в следующий раз, когда вы столкнетесь с этой проблемой, запустите Activity Monitor, чтобы проверить, работает ли оболочка или вы видите только процесс входа в систему .
Как только у вас будет возможность сделать это, сообщите о том, что вы нашли.
ПРИМЕЧАНИЕ. - Если у вас открыты другие терминалы, убедитесь, что вы проверяете соответствующий процесс. Я предполагаю, что процесс зависания - это процесс с наибольшим номером идентификатора процесса (PID).
2. Как называется Терминал?
В следующий раз, когда у вас возникнет эта проблема, вы можете принять к сведению, что заголовок окна терминала и отчитаться?
3. Убить Судо
Вы заявляете, что перезагрузка вашего MBP всегда решает эту проблему.
Однако в следующий раз, когда у вас возникнет эта проблема (возможно, после того, что я описал в пункте 1 выше), я бы хотел, чтобы вы попытались убить sudo из Activity Monitor.
Как только вы попробовали это, дайте нам знать, что происходит.
4. Попробуйте переместить ваши файлы .bash *
Возможно (по разным причинам) у вас может быть файл .bash_profile в вашем пользовательском каталоге, и это вызывает периодические проблемы. Это то, о чем вы можете даже не знать, но вы можете использовать Automator для запуска скрипта, который находит и перемещает любые файлы .bash.
Вот пример сценария для этого:
Этот скрипт перемещает все файлы, начиная с .bash в вашей домашней папке, во вновь созданную перемещенную подпапку.
После запуска скрипта проверьте эту папку и сообщите нам, есть ли у вас какие-либо файлы в ней.
ПРИМЕЧАНИЕ. - Вы можете пометить новую подпапку как угодно. Для этого просто измените два вхождения перемещенных в сценарии на любой ярлык, который вы хотите использовать.
[ОБНОВИТЬ]
Еще несколько вещей, чтобы попробовать.
5. Попробуйте очистить файлы * .asl
Если вы еще этого не сделали, попробуйте очистить файлы * .asl. Для этого используйте следующее:
ПРИМЕЧАНИЕ. - Это может занять некоторое время, поскольку создается новая оболочка. После завершения убедитесь, что вы полностью вышли из Терминала, чтобы изменения вступили в силу.
6. Безопасный режим
Заметили ли вы разницу в поведении, когда вы запускаете свой MBP в безопасном режиме? Для загрузки в безопасном режиме:
7. Открыть каталог
Это, вероятно, не относится к вашему случаю, поскольку вы не упоминаете об этом, но если вы подключены к сети Open Directory, это также может вызвать проблемы. Обычно это влечет за собой ожидание в течение 10-15 секунд, но я видел сообщения о том, что вход в систему через терминал занимает пять или более минут для завершения в этой ситуации.
источник
zsh
, и даже с пустым.zshrc
,.zprofile
,.profile
и т.д. идентификатор не происходит, плюс это не объясняет , почему другие программы в/usr/local/bin
тоже висят, так что я думаю 4. это из картины. Я вернусь с ответом на другие вопросы, как только получу их.login
кажется виновником, но это все еще не объясняет, почему это работает в iTerm сbash
.Это выглядит как идеальное решение для вас, превышающее максимальное количество процессов на пользователя (или, возможно, максимальное количество процессов).
При стандартной установке macOS вы получаете 709 на пользователя (
ulimit -u
) и 1064 макс процессов (sysctl -a | grep maxp
)Самый простой способ увеличить это - установить Server.app из App Store и перезагрузить компьютер. Вы также можете установить режим производительности для более высоких пределов.
Поскольку вы не описали свою настройку (версию ОС и сборку), вот несколько советов - обязательно проверьте, не ограничивает ли SIP возможность изменения файлов, если вы читали некоторые из старых статей об изменении ограничений, не прибегая к установке сервера. приложение:
источник
Я также видел это в течение нескольких месяцев. Чрезвычайно расстраивает. Единственное, что исправляет это перезагрузка.
Иногда зависания при входе в систему происходят после взаимодействия с tmux.
Я безуспешно перепробовал все рекомендуемые подходы.
Не уверен, что это связано, но a
lsof -p LOGIN_PID
показывает довольно массивный файл/private/var/db/dyld/dyld_shared_cache_x86_64h
для зависшего процесса входа в систему.29.08.2017 Обновление:
Все еще есть проблема. Иногда, когда машина попадает в плохое состояние, у меня открываются окна терминала, которые уже успешно вошли в систему и которые я могу использовать для отладки.
Многие команды не выполняются должным образом, но все они показывают наличие проблем с записью (я думаю, к stdout). Например, когда я бегу
ls -al
, я вижуls: write error
испущенное в stderr. Когда я бегуls -al > /dev/null
, в stderr ничего не выводится.источник
Важно рассматривать реальную проблему, а не только симптом. Так что попробуйте следующие предложения и обновите их, основываясь на том, что может предложить и другие меры.
Какой пользователь владеет терминалом? :
Первое, что я думаю, - это может быть связано с настройкой вашей учетной записи. Если терминал пытается получить доступ к ресурсам или каталогам, которые может сделать только пользователь-администратор (если у вас нет учетной записи администратора), это может привести к зависанию - не позволяя вам получить доступ к терминалу. Поэтому продолжайте и убедитесь, что когда вы начинаете терминальную сессию, она является локальной для вашего пользователя, а не для другого пользователя. Тот факт, что вы не можете создать процесс sudo, указывает мне на это.
Тип Control-Z или Command-Z:
эта последовательность управляющих клавиш приостанавливает работу программы и выдает приглашение оболочки. Теперь вы можете ввести команду jobs, чтобы найти имя программы, затем перезапустить программу с помощью fg или завершить ее с помощью kill.
Нажмите Command-C :
это прервется, если терминал пытается запустить программу в фоновом режиме. Попробуйте пару раз. Обратите внимание, если вы видите какой-либо вывод
Тип Control-Q :
Если вывод был остановлен с помощью Control-S, он перезапустит его.
Получить альтернативную оболочку :
если вы хотите опробовать другую оболочку в течение нескольких дней, их поведение может иногда помочь вам понять проблему с терминалом, если они действуют определенным образом. Проверьте эти ссылки ниже для альтернатив
https://git-scm.com/downloads/guis
https://computers.tutsplus.com/tutorials/beyond-terminal-4-os-x-terminal-alternatives--mac-56217
Поможет узнать следующее, если не упомянуто уже:
Как вы инициируете сеанс терминала? Это через прожектор или значок на рабочем столе или каким-то другим способом?
Что делает терминал, когда он зависает? Это происходит во время выполнения команды (та же команда каждый раз, когда она зависает) или просто зависает с момента запуска терминальной сессии / окна.
Для чего вы обычно используете свой терминал? Если вы в основном используете команды, связанные с git, я бы предложил использовать что-то вроде Github для Mac, поскольку вы обычно можете делать большинство вещей оттуда.
источник
^Z
и^C
Ctrl-Q ничего не делает. Я обычно открываю оболочку, используя Command-N в Терминале. Я программист на полный рабочий день, поэтому я использую терминал в основном для всего. Терминал зависает до того, как что-либо выполнено (включеноlogin
).Я попытался бы отключить SIP и войти в систему dtrace, чтобы найти основную причину (Чтобы отключить и снова включить SIP, см. Http://osxdaily.com/2015/10/05/disable-rootless-system-integrity-protection-mac -os-x / )
Пытаясь дать вам пример выходных данных, я просто обнаружил, что все гораздо проще, чем я думал. Не нужно отключать SIP, просто скопируйте логин.
dtuss вернет системные вызовы и может дать подсказку, где что-то пойдет не так.
дай свой пароль. Тогда делай
введите ваше имя пользователя, нажмите Enter
введите пароль, нажмите ввод
введите «выход», нажмите Enter
и, наконец, загрузите dtruss_login.txt, например, на https://gist.github.com/
Вы можете скопировать содержимое файла в буфер обмена, как это
Вы можете найти пример входа в систему здесь: https://gist.github.com/wolframteetz/49c5188c9dfe68a3841fa18496679579
Второе целое число в каждой строке - время, затраченное на вызов.
Конечно, было бы замечательно, если бы вы могли запустить это, когда вход в систему зависает, но если я вас правильно понял, это невозможно .... может быть, у вас или у кого-то еще есть идея, как «dtruss login», когда терминал завис ?
источник
dtruss
может захватить и показать?login
Источник код команды был опубликован Apple. Сайт macOS 10.13.3 Источник . Требуется только загрузкаsystem_cmds-790.30.1
. После загрузки проект может быть легко изменен для создания толькоlogin
команды. Модифицированный проект иlogin
команда были размещены в GitHub по адресу davidanderson61 / system_cmds-10.13.3 .Идея здесь состоит в том, чтобы модифицировать ее
login
для записи отладочной информации в консоль. Это поможет определить, почемуlogin
команда зависает. Модификации могут быть сделаны любым желающим. Я предполагал, что это был бы я.Установите
login
команду отладки .Выберите последнюю версию с веб-сайта davidanderson61 / system_cmds-10.13.3 / Releases .
Загрузите
login
команду отладки в вашуDownloads
папку. В разделе «Активы» щелкните правой кнопкой мышиlogin
и выберите «Загрузить связанный файл как», затем выберите «Сохранить».Частично отключите защиту целостности системы (SIP). Команда приведена ниже. Перед вводом команды вам нужно загрузиться в MacOS Recover , затем в окно терминала.
Введите команду, указанную ниже, чтобы сохранить исходную
login
команду. Если онlogin.orignal
уже существует, вы можете пропустить этот шаг.Введите команды, приведенные ниже, чтобы скопировать команду отладки
login
и установить соответствующие разрешения.Включить защиту целостности системы (SIP). Введите следующую команду. После этого вы должны перезагрузить.
Настройте консольное приложение
Ниже приведены инструкции по настройке консольного приложения для отображения только сообщений от
login
команды.Добавьте
PID
столбец, как показано ниже.Введите
login
в поле поиска.Пока поле поиска находится в фокусе, нажмите returnклавишу. Поле поиска должно измениться на то, что показано ниже.
Измените
Any
наProcess
, как показано ниже.Измените список
Contains
наEquals
, как показано ниже.Выберите
Save
кнопку. Когда появится запрос «Сохранить поиск как:», введитеLogin
, затем выберитеSave
.Результаты должны появиться, как показано ниже. В следующий раз, когда вы откроете консольное приложение, вам нужно будет только нажать кнопку «Войти».
аппендикс
Как создавался репозиторий GitHub.
system_cmds.xcodeproj
файл, открытый в Xcode.Source Control->Create Git Repositories...
.Product->Scheme->New Scheme...
. Далее выберите вlogin
качестве цели и имени.Project->Build
.Для окна приложения терминала введите следующую команду. Замените
<remote repository URL>
URL-адресом, скопированным на предыдущем шаге.Откройте проект в Xcode и в строке меню выберите
Source Control->Push...
.Как был создан первый релиз
В окне приложения терминала введите следующие команды.
Скопируйте встроенную
login
команду в вашуDownloads
папку.Из вашей учетной записи GitHub создайте новый выпуск как
v1.0
. Присоединить~/Downloads/login
как бинарный файл.источник
У меня была эта проблема также при запуске sbt console в emacs. Всякий раз, когда я выходил из консоли sbt, просто убивая окно вместо того, чтобы сначала «красиво» выйти из консоли sbt, это вызывало зависание процесса Java даже после закрытия окна, и каким-то образом препятствовало созданию новых сеансов терминала. Я принудительно убил процесс Java из монитора активности, и фактически зависший терминал запускался как внутри emacs, так и в новой вкладке.
Теперь я просто убедительно завершил работу с помощью команды
exit
илиctrl-d
(илиctrl-c ctrl-d
в emacsterm/multi-term
), а затем убил окно.источник
login
root
процессы (например, nano, emacs, vim), которые вы, возможно, инициировали и не завершили должным образом (сбой, просто уничтожил терминал и т. Д.), И которые все еще запущены.источник
Просто мои два цента.
Я установил Terminus Package для Sublime Text, который позволяет мне запускать терминал в моем текстовом редакторе.
Закрытие Sublime Text немедленно позволило моему терминалу снова начать работать.
источник
FWIW, у меня была такая же проблема. После перезагрузки проблема исчезнет, но я хотел сэкономить время, которое нужно делать несколько раз в день. Это началось после использования определенной среды nodeJS, поэтому я вошел в монитор активности и заметил, что процесс узла продолжается. Убийство этого экземпляра решило проблему для меня, так что если кто-то, кто испытывал это, недавно начал работать с узлом или npm локально, это может быть вашей проблемой.
источник
Убийство случайного экземпляра nvim исправило это для меня. Я предполагаю, что это не относится к nvim, но что-то, что nvim делал в моем случае, вызывало проблемы. Я бы искал неиспользуемое потерянное приложение терминала в мониторе активности и убил бы его, если найдешь.
источник