OSX 10.12.6 / Xcode 9.2
出于某种原因,当我尝试安装新的Ruby版本或者真正做任何涉及Ruby中的本机扩展的事情时,make
进程无限期地停止。
一开始我注意到,当我尝试在使用bundle install
的Rails应用中运行nokogiri
时,就会发生这种情况。更新nokogiri
并处理本机扩展程序无限期挂起。
然后我尝试卸载 - 重新安装Ruby(使用rbenv
),然后重新捆绑,我发现我甚至无法使用rbenv
安装Ruby(相同的挂起症状)。
所以我想也许rbenv可能存在问题,但是当我尝试从源代码安装新的Ruby版本时也会出现问题。
这些是我正在运行的命令:
$ wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.bz2
$ tar -xjvf ruby-2.4.2.tar.bz2
$ cd ruby-2.4.2
$ ./configure --prefix=~/.rubies/ruby-2.4.2
$ make
make
的输出:
➜ ruby-2.4.2 make
Makefile:3225: warning: overriding commands for target 'ruby'
Makefile:227: warning: ignoring old commands for target 'ruby'
CC = clang
LD = ld
LDSHARED = clang -dynamic -bundle
CFLAGS = -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens -pipe
XCFLAGS = -D_FORTIFY_SOURCE=2 -fstack-protector -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT -fPIE
CPPFLAGS = -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -I. -I.ext/include/x86_64-darwin16 -I./include -I. -I./enc/unicode/9.0.0
DLDFLAGS = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -fstack-protector -Wl,-u,_objc_msgSend -Wl,-pie -framework CoreFoundation
SOLIBS =
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
然后这个过程就会挂起。如果我使用ps
获取流程并使用pstree
和top
检查其流程树,我会得到:
➜ ~ ps aux | grep make
me 8999 0.0 0.0 2451364 1456 s001 S+ 2:01PM 0:00.02 /Applications/Xcode.app/Contents/Developer/usr/bin/make
➜ ~ pstree -p 8999
-+= 00001 root /sbin/launchd
\-+= 01078 me /Applications/iTerm.app/Contents/MacOS/iTerm2
\-+= 01087 me /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp me
\-+= 01088 root login -fp me
\-+= 01090 me -zsh
\-+= 08999 me /Applications/Xcode.app/Contents/Developer/usr/bin/make
\--- 09012 me echo translating probes probes.d
➜ ~ top -pid 09012
PID COMMAND %CPU TIME #TH #WQ #POR MEM PURG CMPR PGRP PPID STATE BOOSTS %CPU_ME %CPU_OTHRS UID FAUL COW
9012 echo 0.0 00:00.00 5 0 17 496K 0B 0B 8999 8999 sleeping *0[1] 0.00000 0.00000 503 353 13
正如您所看到的,它表示进程正在“休眠”并且没有CPU使用率。
我在网上发现,我可以在OS X上使用dtruss
作为dtrace
的包装,以获得与strace
类似的行为,因此我尝试运行make
然后在另一个窗口中跟踪它:
➜ ~ pstree -p 15632
-+= 00001 root /sbin/launchd
\-+= 01078 me /Applications/iTerm.app/Contents/MacOS/iTerm2
\-+= 01087 me /Applications/iTerm.app/Contents/MacOS/iTerm2 --server login -fp me
\-+= 01088 root login -fp me
\-+= 01090 me -zsh
\-+= 15632 me /Applications/Xcode.app/Contents/Developer/usr/bin/make
\--- 15645 me echo translating probes probes.d
➜ ~ sudo dtruss -fp 15645
dtrace: system integrity protection is on, some features will not be available
PID/THRD SYSCALL(args) = return
15645/0xe4d2: madvise(0xC42008C000, 0x74000, 0x5) = 0 0
15645/0xe4d2: select(0x0, 0x0, 0x0, 0x0, 0xC420041F18) = 0 0
15645/0xe4d2: select(0x0, 0x0, 0x0, 0x0, 0xC420041F18) = 0 0
15645/0xe4d2: select(0x0, 0x0, 0x0, 0x0, 0xC420041F18) = 0 0
这些“选择”行每分钟左右出现一次,但这就是我所得到的。
我完全不知道接下来会尝试什么。有什么建议??