【问题标题】:Is it possible for Eclipse to terminate gently instead of using SIGKILL?Eclipse 是否可以温和地终止而不是使用 SIGKILL?
【发布时间】:2010-10-15 05:16:56
【问题描述】:

我在 Windows 上使用 Eclipse,带有用于 Python 开发的 PyDev 插件。当我使用“运行”启动我的应用程序时,它会生成一个新的 Python (CPython) 实例。当我使用“终止”按钮(红色方块)时,它会终止进程。但是,它似乎执行了 SIGKILL,因此我的关闭处理程序无法清理。

有什么方法可以让 Eclipse 发送 SIGTERM,或者从 Eclipse 控制台模拟键盘中断 (ctrl-c)?

注意:我知道还有其他 Python IDE,例如 Komodo 或 Wing,可能会解决这个问题,但我不打算切换它。

【问题讨论】:

  • 任何解决方案/解决方法??
  • Eclipse 不使用 SIGKILL。

标签: eclipse process pydev


【解决方案1】:

Eclipse 使用发送信号的 Java Process API。这是一个原生 API,没有办法改变它。我假设您也尝试为 SIGKILL 安装处理程序,但没有成功。

因此,唯一的解决方案是编写一个小批处理文件,列出进程并将 SIGTERM 发送给其中一个。从命令提示符调用它。如果您使用 Alt-Tab 切换到它,它几乎和在 Eclipse 中切换一样舒服。

或者编写一个插件来调用批处理文件。

【讨论】:

  • 为 SIGKILL 安装处理程序毫无意义,因为根据定义,它永远不会执行。 SIGTERM 要求程序终止。 SIGKILL 导致操作系统在没有提前通知的情况下强制终止程序。
  • Bemrose:我猜的差不多了,但懒得查了 :)
【解决方案2】:

我查看了How can a Java program get its own process ID? 并想出了这个。

System.out.println("kill -SIGINT "+ProcessHandle.current().pid());

我知道,如果您不想将其打印出来用于生产,那么这并不理想,但如果您只是进行原型设计,那么它很方便。或者你可以把它放在一个 if 只有在你调试时才运行。

【讨论】:

  • 我喜欢这个。确保您在 Java 9 上使用 ProcessHandle
猜你喜欢
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
相关资源
最近更新 更多