【问题标题】:How to terminate Grails 2.3 application started with "run-app"?如何终止以“run-app”开头的 Grails 2.3 应用程序?
【发布时间】:2013-12-19 17:05:45
【问题描述】:

在 2.3 版之前,在控制台窗口中使用“run-app”(开发模式)启动的 Grails 应用程序可以使用 Ctrl-C 终止。它不再适用于 Grails 2.3,按键被简单地忽略。有“stop-app”命令,但它也不会终止正在运行的应用程序。

我可以通过终止控制台窗口来终止应用程序,但我不想这样做,因为在这种情况下,我会丢失打印到该控制台的所有调试输出。

【问题讨论】:

  • 您在使用 stop-app 时遇到什么问题/错误?
  • 你在什么环境下? Ctrl-C 在 Windows 7 上适用于我。
  • 我使用的是 Windows 7 Enterprise 64 位、Java 1.7.0_45、Grails 2.3.4。应用程序启动后按 Ctrl-C 无效。该应用程序不会终止。没有抛出错误。它只是继续运行。
  • 在 Ubuntu 13.04 上,如果出现较早的 OutOfMemoryError,我有时会发生这种情况,否则 ctrl-c 正常工作
  • 我一直使用在应用程序的基本目录中创建一个名为.kill-run-app 的空文件的技巧,在 2.3 中仍然可以使用吗?

标签: grails grails-2.3


【解决方案1】:

从 Grails 2.3.4 升级到 2.3.7 解决了我的问题。在 Grails 2.3.7 Ctrl-C 中,“run-app”和“stop-app”的行为与记录中的一样。我认为此案已结案。

(我不确定这是否有资格作为答案,但我觉得这个问题应该以某种形式结束......)

【讨论】:

    【解决方案2】:

    来自http://grails.org/doc/2.3.x/guide/commandLine.html#forkedMode “从 Grails 2.3 开始,run-app、run-war、test-app 和控制台命令现在在分叉的 JVM 中执行,以便将构建类路径与运行时类路径隔离开来。”

    如果使用这些默认设置,您会注意到创建了两个 java.exe 进程,而 CTRL-C 只会杀死其中一个。

    我自己也注意到了这一点。只需在您的 BuildConfig.groovy 中注释掉以下行

    run: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256],

    【讨论】:

    • 感谢 Jamie 的建议,但它对我不起作用。我从应用程序开始,推荐了“run:[...]”行(如您所建议的那样),以及整个“grails.project.fork = [...]”闭包,但仍然没有 Ctrl- C,也不是“stop-app”停止正在运行的应用程序。这对你有用吗?
    • 这很奇怪。如果我取消注释 fork 部分,则会创建两个 java.exe 进程,但是当注释掉时,它只会创建一个(我在发布之前重新验证过)。 CTRL-C 是否停止两个进程之一(我假设你的情况有两个)。
    • Jamie,你说得对,“run: [...]”这一行控制应用程序是由主 java 进程还是由分叉的进程(一个或两个 java.exe 进程)运行。我的问题是,在这两种情况下,应用程序都不会被 Ctrl-C 或“grails stop-app”命令终止。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 2015-05-29
    相关资源
    最近更新 更多