Mac OS 如果使用 "rails server",Catalina 无法正确关闭

Mac OS Catalina does not shutdown correctly if "rails server" is used

我一直在 Mac OS Catalina 上使用 rails server 和 Rails 6.0.1。我注意到,如果启动服务器(无论是使用 Puma 还是 unicorn),然后将其关闭,并尝试关闭计算机,它就会挂起,直到 Apple 的看门狗强行关闭系统。下次启动时,我总是得到相同的崩溃报告。

panic(cpu 2 caller 0xffffff7f8ef9daae): watchdog timeout: no checkins from watchdogd in 187 seconds (21 totalcheckins since monitoring last enabled), shutdown in progress
Backtrace (CPU 2), Frame : Return Address
0xffffff83b7473c40 : 0xffffff800e539a3b
0xffffff83b7473c90 : 0xffffff800e670fe5
0xffffff83b7473cd0 : 0xffffff800e662a5e
0xffffff83b7473d20 : 0xffffff800e4e0a40
0xffffff83b7473d40 : 0xffffff800e539127
0xffffff83b7473e40 : 0xffffff800e53950b
0xffffff83b7473e90 : 0xffffff800ecd1875
0xffffff83b7473f00 : 0xffffff7f8ef9daae
0xffffff83b7473f10 : 0xffffff7f8ef9d472
0xffffff83b7473f50 : 0xffffff7f8efb2e76
0xffffff83b7473fa0 : 0xffffff800e4e013e
      Kernel Extensions in backtrace:
         com.apple.driver.watchdog(1.0)[AA44EEB8-57FA-3CAC-9105-C7AB21900B9A]@0xffffff7f8ef9c000->0xffffff7f8efa4fff
         com.apple.driver.AppleSMC(3.1.9)[6DA4BDC6-9C64-34B3-A60E-D345D2DC2D5F]@0xffffff7f8efa5000->0xffffff7f8efc3fff
            dependency: com.apple.driver.watchdog(1)[AA44EEB8-57FA-3CAC-9105-C7AB21900B9A]@0xffffff7f8ef9c000
            dependency: com.apple.iokit.IOACPIFamily(1.4)[4A40B298-87E0-373E-84A9-9A2227924F8F]@0xffffff7f8ef07000
            dependency: com.apple.iokit.IOPCIFamily(2.9)[AA7C7A4F-9F5D-3533-9E78-177C3B6A72BF]@0xffffff7f8ef10000

BSD process name corresponding to current thread: kernel_task
Boot args: chunklist-security-epoch=0 -chunklist-no-rev2-dev

Mac OS version:
19B88

Kernel version:
Darwin Kernel Version 19.0.0: Thu Oct 17 16:17:15 PDT 2019; root:xnu-6153.41.3~29/RELEASE_X86_64

有其他人遇到过这个问题吗?您是如何解决的?我的猜测是 rails server 会留下一些进程 运行 即使在通过 Ctrl-C 关闭后也会阻止 OS 正确关闭。

这是 Catalina 的常见问题,Apple 显然不关心它。可以看到this stackexchange thread, and Apple forum discussion.

到目前为止,没有可用的修复程序,但重置 SMC/NVRAM 可以让您正常关机。

不受此问题影响的一种方法是使用 Docker and docker-compose

我知道它不能解决您的根本问题,但是 Docker 您是 OS 不可知论者,因此您可以处理任何 OSes 而您的项目仍然有效如果可以 install Docker。您还将在 OS 次升级后幸存下来。

Docker 现在非常普遍和流行,因此您可以从社区获得很多帮助,有很多博客文章解释了如何将 Rails 应用程序容器化。

不是很专业的方法,但是...

  • 打开一个终端(如果可能的话,特权)
  • 使用 "ps"("ps awxu" 我似乎记得)拍摄快照运行 进程
  • 启动 Rails 服务器
  • 稍微修改一下
  • 现在停止服务器
  • 拍一张快照

我完全希望留下一些低级别的后台进程 运行 而不会监听关闭信号。 MacOS 关机过程可能过于规规矩矩和有礼貌了。

如果是这种情况,获取进程的 PID 或名称并尝试使用 HUP、TERM 和最后的 KILL 信号将其杀死。您可以通过检查它们的图像路径来很好地了解这些进程从哪里开始(注意不要杀死无辜的进程)。

等待一段时间以确保 pkilling 进程不会使系统处于不稳定状态,然后尝试关闭机器并查看运行情况。

我也发现了这个问题。

此问题是关于 CatalinaGraphic Processing Unit

的支持

如果你用的是NVIDIA图形芯片,Catalina没问题,

但是在Catalina中使用AMD会有问题 特别是2015年macbook pro

很多APP提供商已经兼容这个问题,

但苹果公司一直没有回应。

对于用户来说,这是 Apple 的问题。