在关闭VSCode或使用"kill"(垃圾桶)按钮时,优雅地终止任务而不是强制终止,

mqkwyuun  于 4个月前  发布在  Vscode
关注(0)|答案(7)|浏览(52)

这个问题在所有扩展被禁用时是否发生?:是的

  • VS Code 版本:1.87.0(以及我记得的所有之前的版本)
  • OS 版本:Ubuntu 22.04.4

重现步骤:
我无法创建一个真正的最小示例,但将在这里展示我的确切用例并尝试解释它。

  • 使用 frappe bench 命令 bench start 创建任务(https://github.com/frappe/bench),然后运行它
  • 这会启动3个Redis服务器,一个节点服务器,一个yarn监视器和其他一些东西
  • 使用任务的“杀死”按钮或关闭VSCode
  • bench start 已终止,但它自己生成的所有进程仍在运行
  • 重新打开VSCode并再次启动任务会出现错误,因为仍在运行的Redis服务器正在阻止一些必要的端口
  • 即使它能工作,我们仍然会有多个资源占用的后台进程残留

在任务终端中按下CTRL-C可以优雅地关闭它,bench start 能够正确地终止所有生成的进程。我对 bench 不感兴趣,所以不能回答关于它的特定问题,但我知道它是使用 honcho 和 Procfile 来管理所有这些进程的。
所以我想问的是,是否有一种方法让任务不被强制杀死,而是像在控制台中按下CTRL-C那样对其进行操作。
这似乎描述了 launch.json 已经具有相同的功能:microsoft/vscode-js-debug#630 (评论)

ncecgwcz

ncecgwcz1#

这个问题与我的问题类似,但只关注关闭按钮,而不是关闭VSCode。

$x_1e^{0f_1}x$

kqhtkvqz

kqhtkvqz2#

这个功能请求现在是我们待办事项列表的候选项目。社区有60天的时间对这个问题进行投票。如果它收到20个赞成票,我们将把它移到我们的待办事项列表中。如果没有,我们将关闭它。要了解更多关于我们如何处理功能请求的信息,请参阅我们的documentation
快乐编码!

gjmwrych

gjmwrych3#

我同意这个观点。我猜想使用SIGKILL终止任务,因为它无法被捕获。我需要执行一些命令来清理由该任务创建的临时文件。

bxjv4tth

bxjv4tth4#

这个功能请求收到了足够多的社区投票,我们将其移动到了我们的待办事项列表中。要了解更多关于我们如何处理功能请求的信息,请参阅我们的documentation
快乐编码!

lrpiutwd

lrpiutwd5#

太好了,我很高兴它已经解决了积压问题!
如果我可以提一个建议:

  • 我认为当前的方式应该保持为默认方式,以便始终具有向后兼容性。
  • 我和其他人都希望在这里有一个可选的明确设置任务。
z9smfwbn

z9smfwbn6#

这对于长时间运行的任务尤其有用 - 我在使用SIGINT(例如:Firebase模拟器)创建需要特定端口并运行清理过程的任务时遇到了这个问题。
如果我通过点击垃圾桶图标停止任务,我发现进程仍在后台继续,这意味着所需的端口仍在使用中,必须使用lsof -I :$PORT_NUMBER单独杀死它们,以便识别底层Java进程的ID,然后使用kill $PID。每次需要重新启动模拟器时,都要为9个不同的端口执行此操作,这是不太理想的。😬
完全同意@Mutantpenguin的观点 - 这应该是一个明确的任务基础设置。

inb24sb2

inb24sb27#

请为这个功能添加一个选项,使其能够与SIGBREAK一起工作。我需要终止我们的构建工具,这些工具具有SIGBREAK处理程序(就像命令提示符中的Ctrl-C一样),用于清理构建并输出部分构建的数据。自从Terminate只是杀死进程以来,这对我来说一直是一个麻烦。

相关问题