在OSX上安装Ruby无限期挂起“make”(进程“正在休眠”)

时间:2018-01-31 19:20:26

标签: ruby macos macos-sierra dtrace

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获取流程并使用pstreetop检查其流程树,我会得到:

    ➜  ~ 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

这些“选择”行每分钟左右出现一次,但这就是我所得到的。

我完全不知道接下来会尝试什么。有什么建议??

0 个答案:

没有答案