เทอร์มินัลเข้าสู่ระบบแฮงค์


27

ฉันมีปัญหาแปลก ๆ ใน MacBook Pro ใหม่ของฉัน (ปลายปี 2016, แถบสัมผัส)

มันใช้งานได้ดีหลังจากใช้ไประยะหนึ่งแล้วการเปิดหน้าต่างเทอร์มินัลใหม่จะไม่ทำงานเพราะloginแฮงค์ การรีบูตเครื่องช่วยแก้ไขปัญหา

นี่ดูเหมือนจะเป็นปัญหาที่คนอื่นมีดังนั้นฉันจึงลองใช้วิธีแก้ปัญหาทั้งหมดของพวกเขาแล้ว (จาก 1และ[2] ):

  1. การถอด ~/Library/Preferences/com.apple.Terminal.plist
  2. การตั้งค่าเริ่มต้นของฉันเปลือกเปลือกอีก (จาก/bin/zshไป/bin/shหรือ/bin/bash)
  3. กำลังลบหรือทำความสะอาดฉัน.profile,, .zprofile... สิ่งนี้ไม่ทำงานและฉันสามารถตรวจสอบได้ว่าปัญหาเกิดขึ้นก่อนที่เชลล์จะถูกเรียกใช้เพราะถ้าฉันecho HEYเป็นบรรทัดแรกของฉัน.zshenvนี่ยังไม่ถึง มันจะต้องloginทำให้เกิดปัญหา การแก้ไข/etc/profileเพื่อเพิ่มเสียงสะท้อนที่ด้านบนยังไม่แสดงผลใด ๆ
  4. การเปลี่ยนการ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:

  1. เมื่อมันเกิดขึ้นloginรายการจะปรากฏขึ้นในการตรวจสอบกิจกรรม (บังคับ) การปิดมันยังปิดหน้าต่างเทอร์มินัลที่ห้อยอยู่ การปิดหน้าต่างด้วยตนเองไม่ได้ทำให้loginกระบวนการหายไปในการตรวจสอบกิจกรรม

  2. ชื่อเทอร์มินัลคือTerminal — login — term big — ttys001 — 89x18 — ⌘1ที่ใดterm bigคือชื่อการตั้งค่า

  3. ไม่มี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 ไม่มี Touch Bar) และปัญหายังคงมีอยู่

ฉันได้เปลี่ยนเปลือกหอยด้วย: ตอนนี้ฉันกำลังใช้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
นี่อาจเป็นข้อเสนอแนะที่อ่อนแอ แต่คุณลองติดต่อฝ่ายบริการลูกค้าของ Apple หรือไม่ คำถามของคุณไม่ได้รับความสนใจมากนักตั้งแต่คุณโพสต์ไว้และเจ้าหน้าที่สนับสนุนอาจเคยได้ยินเกี่ยวกับปัญหานี้ ข้อเสนอแนะอื่น ๆ ของฉันเท่านั้นที่จะติดตั้ง MacOS อย่างไรก็ตามเนื่องจาก Mac ของคุณใหม่ดังนั้นฉันจึงไม่รู้ว่าจะใช้งานได้หรือไม่
NoahL

@ klanomath เรียบร้อยแล้ว!
romeovs

หากต้องการทราบว่าการเข้าสู่ระบบกำลังทำอะไรให้เลือกในการตรวจสอบกิจกรรมและเลือกกระบวนการตัวอย่าง กระบวนการเช่นเดียวกันสำหรับกระบวนการอื่นที่หยุดทำงาน อย่างไรก็ตามการดีบักในระดับนี้อาจไม่เหมาะสมสำหรับคำถามและคำตอบ StackExchange อาจเป็นการดีกว่าถ้าคุณยื่นรายงานข้อผิดพลาดกับ Apple รวมถึงไฟล์ตัวอย่างหรือค้นหาผู้ที่สามารถให้การสนับสนุนสำหรับการวินิจฉัยปัญหาในระดับนี้ ดูdeveloper.apple.com/bug-reporting
Chris Page

นานแค่ไหนแขวน คุณพยายามทำให้มันใช้งานได้สิบนาทีหรือไม่? เครื่องของคุณผูกพันกับเครือข่าย Open Directory หรือไม่? โดยเฉพาะอย่างยิ่งการเข้าสู่ระบบจะต้องดึงข้อมูลผู้ใช้ของคุณและหากคุณอยู่ในเครือข่าย OD ที่มีเซิร์ฟเวอร์ไดเรกทอรีไม่ว่าง / ไม่ตอบสนองอาจต้องใช้เวลาสักครู่ในการตอบกลับ โปรแกรมอื่นยังดึงข้อมูลผู้ใช้และอาจประสบปัญหานี้
Chris หน้า

ยังไม่ได้ลองอีกต่อไปจะลองอีกครั้ง ฉันไม่ได้ผูกพันกับเครือข่าย Open Directory ข้อผิดพลาดเหล่านี้เกิดขึ้นเช่นกันเมื่อฉันไม่ได้อยู่ในเครือข่ายใด ๆ
romeovs

คำตอบ:


13

ในขณะที่ฉันแน่ใจว่าคุณรู้ว่าการแก้ไขปัญหาเป็นกระบวนการของการกำจัดและมักจะต้องใช้ความอดทนพอสมควร ฉันต้องการลองทำสองสามอย่างเพื่อลองและไปถึงจุดต่ำสุดของสิ่งนี้ให้คุณ

1. ยืนยันว่าแฮงค์ระหว่างการเข้าสู่ระบบ

หากกระบวนการที่ถูกระงับอยู่ระหว่างการเข้าสู่ระบบนี่ก็หมายความว่ากระบวนการยังคงรอการสร้างเซสชันการเข้าสู่ระบบ สมมติว่าเป็นกรณีนี้จากนั้นจะไม่พยายามเริ่มเชลล์เลย

เพื่อยืนยันสิ่งนี้ในครั้งต่อไปที่คุณประสบปัญหานี้ให้เรียกใช้การตรวจสอบกิจกรรมเพื่อตรวจสอบว่าเชลล์ทำงานหรือไม่หรือคุณเห็นกระบวนการล็อกอินเท่านั้น

เมื่อคุณมีโอกาสทำสิ่งนี้แล้วให้รายงานสิ่งที่คุณพบกลับมา

หมายเหตุ: -หากคุณเปิดเทอร์มินัลอื่นให้ตรวจสอบว่าคุณกำลังตรวจสอบกระบวนการที่เกี่ยวข้อง ฉันเดาว่ากระบวนการแฮงค์เป็นกระบวนการที่มีหมายเลข ID กระบวนการ (PID) สูงสุด

2. ชื่อเทอร์มินัลคืออะไร?

ครั้งต่อไปที่คุณมีปัญหานี้คุณสามารถจดบันทึกชื่อของหน้าต่างเทอร์มินัลและรายงานกลับมาได้อย่างไร

3. ฆ่า sudo

คุณระบุว่าการรีบูต MBP ของคุณจะแก้ไขปัญหานี้ได้เสมอ

อย่างไรก็ตามในครั้งต่อไปที่คุณมีปัญหานี้ (อาจหลังจากทำสิ่งที่ฉันอธิบายไว้ในข้อ 1 ข้างต้น) ฉันอยากให้คุณลองฆ่า sudo จาก Activity Monitor

เมื่อคุณได้ลองแล้วโปรดแจ้งให้เราทราบว่าเกิดอะไรขึ้น

4. ลองย้ายไฟล์. bash * ของคุณ

เป็นไปได้ (ด้วยเหตุผลต่าง ๆ ) คุณอาจมีไฟล์. bash_profile ในไดเรกทอรีผู้ใช้ของคุณและสิ่งนี้ทำให้เกิดปัญหาเป็นระยะ ๆ นี่คือสิ่งที่คุณอาจไม่ได้ตระหนักถึง แต่คุณสามารถใช้ Automator เพื่อเรียกใช้สคริปต์ที่ค้นหาและย้ายไฟล์. bash ใด ๆ

นี่คือตัวอย่างสคริปต์สำหรับทำสิ่งนี้:

cd ~

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

สคริปต์นี้จะย้ายไฟล์ทั้งหมดที่เริ่มต้นด้วย. bash ในโฟลเดอร์บ้านของคุณไปยังโฟลเดอร์ย่อยที่ย้ายใหม่ที่สร้างขึ้น

หลังจากรันสคริปต์แล้วให้ตรวจสอบโฟลเดอร์นี้และแจ้งให้เราทราบหากคุณมีไฟล์อยู่ในนั้น

หมายเหตุ: -คุณสามารถติดป้ายกำกับโฟลเดอร์ย่อยใหม่ทุกอย่างที่คุณต้องการ ในการทำเช่นนั้นเพียงแค่เปลี่ยนการย้ายสองครั้งในสคริปต์เป็นป้ายกำกับที่คุณต้องการใช้

[อัปเดต]

บางสิ่งเพิ่มเติมให้ลอง

5. ลองล้างไฟล์ * .asl

หากคุณยังไม่ได้ลองลบไฟล์ * .asl เมื่อต้องการทำสิ่งนี้ให้ใช้สิ่งต่อไปนี้:

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

หมายเหตุ: -อาจใช้เวลาสักครู่ในการสร้างเชลล์ใหม่ เมื่อเสร็จแล้วตรวจสอบให้แน่ใจว่าคุณได้ออกจาก Terminal อย่างสมบูรณ์เพื่อให้การเปลี่ยนแปลงมีผล

6. เซฟโหมด

คุณสังเกตเห็นความแตกต่างของพฤติกรรมเมื่อคุณเริ่ม MBP ในเซฟโหมดหรือไม่ ในการบูตเข้าสู่ Safe Mode:

  1. ปิดเครื่อง Mac ของคุณอย่างสมบูรณ์
  2. รีสตาร์ท Mac ของคุณ
  3. กดShiftปุ่มและวางมันทันที
  4. ปล่อยShiftกุญแจเมื่อคุณเห็นหน้าต่างเข้าสู่ระบบ (หมายเหตุ: หากคุณเปิดใช้งาน FileVault คุณอาจต้องเข้าสู่ระบบสองครั้ง)
  5. เมื่อ MBP ของคุณเริ่มต้นลองใช้ Terminal และดูว่าคุณยังสามารถทำซ้ำปัญหาได้หรือไม่
  6. เมื่อเสร็จแล้วคุณสามารถออกจาก Safe Mode ได้โดยเริ่มต้น MBP ใหม่ตามปกติ

7. เปิดไดเรกทอรี

สิ่งนี้อาจไม่ได้ใช้ในกรณีของคุณเนื่องจากคุณไม่ได้พูดถึง แต่ถ้าคุณเชื่อมต่อกับเครือข่าย Open Directory สิ่งนี้อาจทำให้คุณมีปัญหาได้ โดยปกติแล้วจะรอประมาณ 10 - 15 วินาทีเท่านั้น แต่ฉันได้เห็นรายงานการเข้าใช้งานเทอร์มินัลใช้เวลาห้านาทีหรือมากกว่าในการทำให้เสร็จในสถานการณ์นี้


ขอบคุณ! ฉันใช้zshและแม้จะมีที่ว่างเปล่า.zshrc, .zprofile, .profileฯลฯ รหัสไม่ได้เกิดขึ้นรวมทั้งที่ไม่ได้อธิบายว่าทำไมโปรแกรมอื่น ๆ ใน/usr/local/binยังแขวนดังนั้นฉันคิดว่า4.เป็นออกจากภาพ ฉันจะกลับมาพร้อมคำตอบสำหรับคำถามอื่นเมื่อฉันได้รับพวกเขา
romeovs

เพิ่มการอัปเดตพร้อมคำตอบสำหรับคำถามเหล่านี้ loginน่าจะเป็นผู้กระทำผิด แต่ก็ยังไม่ได้อธิบายว่าทำไมมันไม่ทำงานใน iTerm bashกับ
romeovs

ฉันอัพเดตคำตอบแล้ว อย่างไรก็ตามฉันเพิ่งรู้ว่าคุณไม่ได้ระบุว่าคุณได้ลองใช้เวลานานเท่าไรเพื่อรอให้การเข้าสู่ระบบของเทอร์มินัลเสร็จสมบูรณ์ มันเป็นการดีที่จะทราบว่าในที่สุดมันจะเข้าสู่ระบบหรือไม่ว่าจะเป็นเพียงแฮงค์ไปเรื่อย ๆ
Monomeeth

@romeovs เพียงแค่สงสัยคุณเคยแก้ไขปัญหานี้หรือไม่?
Monomeeth

ไม่ :( ยังคงทำงานอยู่มันเริ่มเกิดขึ้นได้น้อยกว่ามาก
romeovs

6

ดูเหมือนว่าเหมาะสมที่สุดสำหรับคุณเกินกว่ากระบวนการสูงสุดต่อผู้ใช้ (หรืออาจเป็นกระบวนการสูงสุด)

ในการติดตั้ง macOS แบบสต็อกคุณจะได้รับ 709 ต่อผู้ใช้ ( ulimit -u) และกระบวนการสูงสุด 1064 ( sysctl -a | grep maxp)

วิธีง่าย ๆ ในการชนสิ่งเหล่านี้คือติดตั้ง Server.app จาก App Store แล้วรีบูต คุณยังสามารถตั้งค่าโหมดการทำงานสำหรับขีด จำกัด ที่สูงขึ้น

เนื่องจากคุณไม่ได้อธิบายการตั้งค่าของคุณ (เวอร์ชั่นระบบปฏิบัติการและบิลด์) ต่อไปนี้เป็นคำแนะนำ - โปรดตรวจสอบว่า SIP จำกัด ความสามารถในการเปลี่ยนไฟล์ถ้าคุณอ่านบทความเก่า ๆ เกี่ยวกับการเปลี่ยนข้อ จำกัด โดยไม่ต้องหันไปติดตั้งเซิร์ฟเวอร์ แอปพลิเค:


จุดสุดยอด! ฉันไม่ได้พิจารณาเรื่องนี้ด้วยซ้ำ :)
Monomeeth

@Monomeeth คำตอบของคุณยอดเยี่ยม มีสิ่งดีๆมากมายอยู่ในนั้น
bmike

@bmike มีวิธีที่ฉันสามารถตรวจสอบจำนวนกระบวนการทั้งหมดเพื่อตรวจสอบว่าเป็นกรณีนี้หรือไม่? บางทีฉันสามารถทำซ้ำได้โดยสร้างกระบวนการ 709 ครั้ง?
romeovs

5

ฉันได้เห็นสิ่งนี้มาหลายเดือนแล้ว น่าผิดหวังอย่างมาก สิ่งเดียวที่แก้ไขได้คือรีบูต

  • กลางปี ​​2015 MBP (ไม่มีแถบสัมผัส)
  • MacOS 10.12.6 เบต้า

บางครั้งการล็อกอินแฮงค์เกิดขึ้นหลังจากโต้ตอบกับ tmux

ฉันลองวิธีที่แนะนำทั้งหมดไม่สำเร็จ

ไม่แน่ใจว่าเกี่ยวข้องหรือไม่ แต่มีlsof -p LOGIN_PIDไฟล์ที่แสดงว่ามีขนาดใหญ่มาก/private/var/db/dyld/dyld_shared_cache_x86_64hสำหรับกระบวนการเข้าสู่ระบบที่หยุดทำงาน

ปรับปรุง 8/29/2017:

ยังคงมีปัญหา บางครั้งเมื่อเครื่องเข้าสู่สถานะไม่ดีฉันมีหน้าต่างเทอร์มินัลเปิดที่ลงชื่อเข้าใช้เรียบร้อยแล้วซึ่งฉันสามารถใช้เพื่อแก้ไขข้อบกพร่องได้

คำสั่งจำนวนมากทำงานไม่ถูกต้อง แต่พวกเขาทั้งหมดแสดงรูปแบบของการมีปัญหาในการเขียน (เพื่อ stdout ฉันคิด) ตัวอย่างเช่นเมื่อฉันเรียกใช้ls -alฉันเห็นว่าls: write errorปล่อย stderr เมื่อฉันวิ่งls -al > /dev/nullไม่มีอะไรถูกพิมพ์ไปยัง stderr


มีโชคในการหาสิ่งนี้หรือไม่?
romeovs

ปัญหาได้รับการแก้ไขสำหรับฉันตั้งแต่อัปเดตระบบปฏิบัติการของฉัน มันได้รับการแก้ไขสำหรับรุ่นรองเล็กน้อยและตอนนี้ฉันกำลังใช้งาน 10.13.3 (17D47)
แซค

กำลังใช้งาน 10.13.3 (17D47) เช่นกัน! มันกลายเป็นบ่อย แต่ก็ยังเกิดขึ้นบางครั้ง
romeovs

4

มันเป็นสิ่งสำคัญในการรักษาปัญหาที่แท้จริงไม่ใช่แค่อาการ ดังนั้นลองใช้คำแนะนำต่อไปนี้และอัปเดตตามที่สามารถแนะนำการแก้ไขเพิ่มเติมเช่นกัน

  1. ผู้ใช้รายไหนเป็นเจ้าของเทอร์มินัล :
    ลางสังหรณ์แรกของฉันคือสิ่งนี้อาจเกี่ยวข้องกับวิธีการตั้งค่าบัญชีของคุณ หากเทอร์มินัลกำลังพยายามเข้าถึงทรัพยากรหรือไดเรกทอรีที่มีเพียงผู้ใช้ผู้ดูแลระบบเท่านั้นที่สามารถ (หากบัญชีของคุณไม่ใช่บัญชีผู้ดูแลระบบ) นั่นอาจทำให้สถานะค้างได้ - ไม่อนุญาตให้คุณเข้าถึงเทอร์มินัล ดังนั้นไปข้างหน้าและตรวจสอบให้แน่ใจเมื่อคุณเริ่มต้นเซสชันเทอร์มินัลเป็นของผู้ใช้ของคุณไม่ใช่ผู้ใช้คนอื่น ความจริงที่ว่าคุณไม่สามารถสร้างกระบวนการ sudo ได้ก็คือชี้ไปที่ทิศทางนี้

  2. ประเภท Control-Zหรือ Command-Z:
    ลำดับคีย์การควบคุมนี้ระงับโปรแกรมที่อาจทำงานอยู่และให้เชลล์พรอมต์ให้คุณ ตอนนี้คุณสามารถป้อนคำสั่ง jobs เพื่อค้นหาชื่อของโปรแกรมจากนั้นรีสตาร์ทโปรแกรมด้วย fg หรือยุติด้วย kill

  3. กด Command-C :
    สิ่งนี้จะขัดจังหวะหากเทอร์มินัลพยายามเรียกใช้โปรแกรมในพื้นหลัง ลองสองสามครั้ง หมายเหตุถ้าคุณเห็นผลลัพธ์ใด ๆ

  4. ประเภทการควบคุม -Q :
    ถ้าผลลัพธ์ถูกหยุดด้วย Control-S สิ่งนี้จะรีสตาร์ท

  5. รับเชลล์ทางเลือก :
    หากคุณต้องการทดลองใช้เชลล์ที่แตกต่างกันสองสามวันพฤติกรรมของพวกเขาบางครั้งอาจช่วยให้คุณเข้าใจปัญหากับเทอร์มินัลที่ได้รับหากพวกเขาดำเนินการในลักษณะที่แน่นอน ตรวจสอบลิงค์เหล่านี้ด้านล่างเพื่อหาทางเลือกอื่น

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

จะช่วยให้รู้ดังต่อไปนี้หากยังไม่ได้กล่าวถึง:

  • คุณเริ่มเซสชันเทอร์มินัลอย่างไร สิ่งนี้ผ่านสปอตไลต์หรือไอคอนเดสก์ท็อปหรือวิธีอื่นหรือไม่?

  • เทอร์มินัลกำลังทำอะไรเมื่อมันแฮงค์? มันอยู่ตรงกลางของการดำเนินการคำสั่ง (คำสั่งเดียวกันในแต่ละครั้งก่อนที่มันจะหยุด) หรือเพียงแค่หยุดจากช่วงเวลาที่คุณเริ่มต้นเทอร์มินัลเซสชั่น / windows

  • ปกติแล้วคุณใช้เทอร์มินัลทำอะไร หากการใช้งานส่วนใหญ่ของคุณใช้สำหรับคำสั่งที่เกี่ยวข้องกับคอมไพล์เท่านั้นฉันขอแนะนำให้ใช้ Something เช่นGithub สำหรับ Macโดยปกติคุณสามารถทำสิ่งต่าง ๆ ส่วนใหญ่ได้จากที่นั่น


Ctrl-Z และ Ctrl-C ทั้งสองเพิ่งแสดงบนหน้าจอเป็น^Zและ^CCtrl-Q ไม่ทำอะไรเลย ฉันมักจะเปิดเปลือกโดยใช้ Command-N ใน Terminal ฉันเป็นโปรแกรมเมอร์เต็มเวลาดังนั้นฉันจึงใช้เครื่องเทอร์มินัลสำหรับทุกสิ่งโดยทั่วไป เทอร์มินัลหยุดทำงานก่อนที่จะมีการดำเนินการใด ๆ (เปิดlogin)
romeovs

@romeovs แล้วตัวชี้ 1 เกี่ยวกับประเภทผู้ใช้ของคุณคืออะไร สกรีนช็อตที่มีปัญหาจะช่วยได้เช่นกัน ขอบคุณ
pal4life

ฉันเป็นผู้ใช้เริ่มต้นและผู้ดูแลระบบใน macbook ของฉัน
romeovs

4

ฉันจะลองปิดการใช้งาน SIP และ dtrace เข้าสู่ระบบเพื่อหาสาเหตุของราก (ในการปิดการใช้งานและเปิดใช้งาน SIP อีกครั้งดู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

พยายามที่จะให้ผลลัพธ์ตัวอย่างคุณเพิ่งพบว่าสิ่งต่าง ๆ ง่ายกว่าที่ฉันคิด ไม่จำเป็นต้องปิดการใช้งาน SIP เพียงแค่คัดลอกเข้าสู่ระบบ

dtuss จะส่งคืนการเรียกของระบบและอาจให้คำแนะนำว่าสิ่งใดผิดพลาด

cp /usr/bin/login .
sudo ls

ให้รหัสผ่านของคุณ จากนั้นทำ

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

ป้อนชื่อผู้ใช้ของคุณกด Enter

ป้อนรหัสผ่านของคุณกด Enter

ป้อน 'exit' กด Enter

และในที่สุดอัปโหลด dtruss_login.txt ไปยังเช่นhttps://gist.github.com/

คุณสามารถคัดลอกเนื้อหาของไฟล์ไปยังคลิปบอร์ดเช่นนี้

cat dtruss_login.txt | pbcopy

คุณสามารถหาตัวอย่างเข้าสู่ระบบได้ที่นี่: https://gist.github.com/wolframteetz/49c5188c9dfe68a3841fa18496679579

จำนวนเต็มที่สองในแต่ละบรรทัดคือเวลาที่ใช้ในการโทร

แน่นอนว่าจะเป็นการดีถ้าคุณสามารถใช้งานได้เมื่อการล็อกอินแฮงค์ แต่ถ้าฉันทำให้คุณถูกต้องนี่เป็นไปไม่ได้ .... บางทีคุณหรือคนอื่นมีความคิดเกี่ยวกับวิธีการ 'เข้าสู่ระบบ dtruss เมื่อเทอร์มินัลหยุดทำงาน ?


อุ๊ยตาย ดูเหมือนว่าจะมีความเจ็บปวดมากมายสำหรับบางสิ่งที่เกิดขึ้นหลายชั่วโมงหรือหลายวันหลังจากที่เริ่มเข้าสู่ระบบ คุณช่วย จำกัด ให้แคบลงว่าdtrussจะจับภาพและแสดงอะไร?
bmike

หากเข้าสู่ระบบแฮงค์ในการเรียกระบบซึ่งเป็นไปได้ค่อนข้างมากมันจะแสดงให้คุณเห็น หากแฮงค์ระหว่างการโทรของระบบมันจะแสดงให้คุณทราบว่าจะใช้อะไรและให้คำแนะนำว่าเกิดอะไรขึ้นจริง เช่นถ้าแฮงค์หลังจากอ่านไฟล์การกำหนดค่าบางอย่างโดยการเรียกของระบบข้อผิดพลาดที่อาจเกิดขึ้นระหว่างการแยกวิเคราะห์การกำหนดค่านั้น คุณต้องดูอย่างใกล้ชิดแล้ว อาจเกี่ยวข้องกับเครือข่าย ... ใครจะรู้จนกว่าคุณจะตรวจแก้จุดบกพร่อง;)
user2707001

ปัญหาคือฉันไม่สามารถสร้างปัญหาขึ้นมาใหม่ได้ด้วยตนเองจนกว่าจะสายเกินไป
romeovs

จากนั้นดำเนินการคำสั่งในลูป "ถาวร" และทำ ">> dtruss_login.txt 2> & 1" แทน "2> dtruss_login.txt" เมื่อข้อผิดพลาดปรากฏขึ้นคุณจะเห็นในตอนท้ายของการส่งออก
user2707001

ในที่สุดฉันก็สามารถที่จะได้รับบันทึก dtruss: gist.github.com/romeovs/6661ae0db77e57281b531676cc5dc007ตั้งแต่เข้าสู่ระบบแฮงค์นี้ไม่เคยออกเลยดังนั้นฉันจึง ctrl-C'ed หลังจากผ่านไปประมาณ 10 วินาที
romeovs

1

loginรหัสที่มาคำสั่งที่ได้รับการตีพิมพ์โดยแอปเปิ้ล เว็บไซต์ที่เป็นMacOS 10.13.3 มา system_cmds-790.30.1การดาวน์โหลดที่ต้องการเพียงอย่างเดียวคือ เมื่อดาวน์โหลดแล้วสามารถแก้ไขโครงการได้อย่างง่ายดายเพื่อสร้างloginคำสั่งเท่านั้น โครงการแก้ไขและloginคำสั่งที่ได้รับการขึ้นใน GitHub ที่davidanderson61 / system_cmds-10.13.3

แนวคิดในที่นี้คือการปรับเปลี่ยนloginเพื่อเขียนข้อมูลการดีบักไปยังคอนโซล สิ่งนี้จะช่วยระบุสาเหตุที่loginคำสั่งหยุดทำงาน การแก้ไขอาจทำให้ทุกคนที่ต้องการมีส่วนร่วม ฉันคิดว่านี่คงเป็นฉัน

ติดตั้งloginคำสั่งDebug

  1. เลือกรีลีสล่าสุดจากเว็บไซต์davidanderson61 / system_cmds-10.13.3 /รีลีส

  2. ดาวน์โหลดloginคำสั่งdebug ไปยังDownloadsโฟลเดอร์ของคุณ ภายใต้ "สินทรัพย์" คลิกขวาloginแล้วเลือก "ดาวน์โหลดไฟล์ที่เชื่อมโยงเป็น" จากนั้นเลือก "บันทึก"

  3. ปิดใช้งานการป้องกันความสมบูรณ์ของระบบ (SIP) บางส่วน คำสั่งที่ได้รับด้านล่าง ก่อนที่จะป้อนคำสั่งคุณจะต้องบูตเพื่อกู้คืน macOSจากนั้นหน้าต่างเทอร์มินัล

    csrutil  enable  --without  fs
  4. ป้อนคำสั่งที่ระบุด้านล่างเพื่อบันทึกloginคำสั่งเดิม หากlogin.orignalมีอยู่แล้วคุณสามารถข้ามขั้นตอนนี้ได้

    sudo  mv  /usr/bin/login  /usr/bin/login.original
  5. ป้อนคำสั่งที่ให้ไว้ด้านล่างเพื่อคัดลอกloginคำสั่งdebug และตั้งค่าการอนุญาตที่เหมาะสม

    sudo  cp  ~/Downloads/login  /usr/bin/login
    sudo  chmod  104555  /usr/bin/login
  6. เปิดใช้งานการป้องกันความสมบูรณ์ของระบบ (SIP) ป้อนคำสั่งต่อไปนี้ หลังจากนั้นคุณควรเริ่มต้นใหม่

    sudo  csrutil  clear

กำหนดค่าแอปพลิเคชันคอนโซล

ด้านล่างนี้เป็นขั้นตอนในการกำหนดค่าแอปพลิเคชันคอนโซลให้แสดงเฉพาะข้อความจากloginคำสั่ง

  1. เปิดแอปพลิเคชันคอนโซล
  2. เพิ่มPIDคอลัมน์ดังที่แสดงด้านล่าง

    G2

  3. ป้อนloginในช่องค้นหา

    g3

    ในขณะที่ฟิลด์ค้นหามีโฟกัสกดreturnปุ่ม ช่องค้นหาควรเปลี่ยนเป็นสิ่งที่แสดงด้านล่าง

    G8

  4. เปลี่ยนAnyไปProcessดังต่อไปนี้

    g4

  5. รายการเปลี่ยนContainsไปEqualsดังต่อไปนี้

    G5

  6. เลือกSaveปุ่ม เมื่อได้รับแจ้งสำหรับ "ในฐานะที่เป็นบันทึกการค้นหา:" ใส่แล้วเลือกLoginSave

    G6

ผลลัพธ์ควรปรากฏตามที่แสดงด้านล่าง ครั้งต่อไปที่คุณเปิดแอปพลิเคชันคอนโซลคุณจะต้องเลือกปุ่ม "เข้าสู่ระบบ" เท่านั้น

g7

ภาคผนวก

วิธีสร้างที่เก็บ GitHub

  1. คลิกที่system_cmds.xcodeprojไฟล์ที่เปิดใน Xcode
  2. Source Control->Create Git Repositories...จากแถบเมนูให้เลือก
  3. Product->Scheme->New Scheme...จากแถบเมนูให้เลือก ถัดไปเลือกloginเป็นเป้าหมายและชื่อ
  4. Project->Buildจากแถบเมนูให้เลือก
  5. ออกจาก Xcode
  6. เข้าสู่ระบบที่ GitHub และสร้างที่เก็บใหม่
  7. ที่ด้านบนของหน้าการตั้งค่าด่วนของที่เก็บ GitHub คลิกG1เพื่อคัดลอก URL ที่เก็บระยะไกล
  8. สำหรับหน้าต่างแอปพลิเคชัน Terminal ให้ป้อนคำสั่งต่อไปนี้ แทนที่<remote repository URL>ด้วย URL ที่คัดลอกในขั้นตอนก่อนหน้า

    git  remote  add  origin  <remote repository URL>
  9. เปิดโครงการใน Xcode Source Control->Push...และจากแถบเมนูให้เลือก

วิธีการสร้างรีลีสแรก

  1. จากหน้าต่างแอปพลิเคชัน Terminal ให้ป้อนคำสั่งต่อไปนี้

    git  tag  -a  v1.0  -m  "Original source code"
    git  push  origin  v1.0
  2. คัดลอกloginคำสั่งบิวด์ไปยังDownloadsโฟลเดอร์ของคุณ

  3. จากบัญชี GitHub v1.0ของคุณสร้างรุ่นใหม่เป็น แนบ~/Downloads/loginเป็นไบนารี


1

ฉันมีปัญหานี้ในขณะที่ใช้ sbt console ใน emacs เมื่อใดก็ตามที่ฉันออกจาก sbt console โดยเพียงแค่ฆ่าหน้าต่างแทนที่จะออกจาก sbt console "อย่างดี" ก่อนมันทำให้กระบวนการ java หยุดทำงานแม้ว่าจะปิดหน้าต่างแล้วก็ตาม ฉันบังคับให้ฆ่ากระบวนการจาวาจากการตรวจสอบกิจกรรมและเทอร์มินัลแฮงค์เริ่มต้นจากภายใน emacs เช่นเดียวกับในแท็บใหม่

ตอนนี้ฉันเพียงแค่ให้แน่ใจว่าจะออกจากการใช้คำสั่งexitหรือctrl-d(หรือctrl-c ctrl-dใน emacs term/multi-term) แล้วฆ่าหน้าต่าง


0
  1. ตรวจสอบว่ากระบวนการของคุณแฮงค์จริงๆในระหว่าง login
  2. ลองดูที่การตรวจสอบกิจกรรมและระวังrootกระบวนการ (เช่นนาโน emacs เป็นกลุ่ม) คุณอาจเริ่มต้นและไม่ออกจากโปรแกรมอย่างถูกต้อง (เกิดความผิดพลาดเพิ่งฆ่าเครื่องเทอร์มินัล ฯลฯ ) และที่ยังทำงานอยู่
  3. ปิดใช้งานกระบวนการนี้และการเข้าสู่ระบบควรใช้งานได้ทันที

0

แค่สองเซ็นต์ของฉัน

ฉันได้ติดตั้งแพ็คเกจ Terminus สำหรับ Sublime Text ซึ่งอนุญาตให้ฉันเรียกใช้เทอร์มินัลภายในโปรแกรมแก้ไขข้อความ

การปิด Sublime Text ทำให้เทอร์มินัลของฉันเริ่มทำงานอีกครั้งทันที


ฉันไม่คิดว่านี่จะช่วยตอบคำถาม สิ่งนี้จะป้องกันมิให้เครื่องห้อยโดยเรียกใช้ภายใน Terminus หรือไม่? แม้ว่าจะเป็นเช่นนั้น แต่ดูเหมือนว่าคุณกำลังแก้ไขปัญหาอื่นที่นี่
haykam

เทอร์มินัลปกติของฉันจะไม่ทำงานเนื่องจากปัญหาบางอย่างเกี่ยวกับ Sublime Text
ความอุดมสมบูรณ์

0

FWIW ฉันมีปัญหาเดียวกันนี้ มันจะแก้ไขได้หลังจากรีบูตเครื่อง แต่ฉันต้องการประหยัดเวลาในการทำหลาย ๆ ครั้งต่อวัน มันเริ่มต้นหลังจากใช้สภาพแวดล้อม nodeJS เฉพาะดังนั้นฉันจึงเข้าสู่การตรวจสอบกิจกรรมและสังเกตเห็นว่ากระบวนการโหนดดำเนินต่อไป การฆ่าอินสแตนซ์นั้นช่วยแก้ปัญหาให้ฉันได้ดังนั้นหากใครก็ตามที่ประสบปัญหานี้เพิ่งเริ่มทำงานกับโหนดหรือ npm ในเครื่องอาจเป็นปัญหาของคุณ


เป็นกระบวนการ "java" จรจัดในกรณีของฉัน แต่การฆ่าใน Activity Monitor หยุดการทำงานของเทอร์มินัล!
Adam B

0

การฆ่าอินสแตนซ์ nvim จรจัดแก้ไขปัญหานี้ให้ฉัน ฉันคิดว่านี่ไม่ใช่เฉพาะ nvim แต่มีบางสิ่งบางอย่าง nvim ในกรณีของฉันที่กำลังทำอยู่ซึ่งทำให้เกิดปัญหา ฉันจะมองหาแอพเทอร์มินัลกำพร้านอกสถานที่ในการตรวจสอบกิจกรรมและฆ่ามันถ้าคุณเจอ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.