gpt4 book ai didi

windows - 如何在 Windows 下的 VS Code 中运行后台任务?

转载 作者:可可西里 更新时间:2023-11-01 11:05:53 28 4
gpt4 key购买 nike

我在 package.json 文件中设置了一些脚本,它们应该在后台运行,比如

"scripts": {
"babel-watch": "babel client -d _tmp/babel -w",
"server": "node server.js",
"background": "start npm run babel-watch && start npm run server"
}

我想从 VS Code 运行 background 任务,所以我这样设置 tasks.json(省略了一些行):

"command": "npm",
"args": [],
"isShellCommand": true,
"showOutput": "always",
"suppressTaskName": true,
"tasks": [
{
"taskName": "background",
"args": ["run", "background"]
}
]

如果我从 Far Manager 运行 npm run background,将启动 2 个新的控制台窗口,然后我将返回到 Far。但是,当我在 VS Code 中运行它时(使用 task background,启动了 2 个新的控制台窗口,但是 VS code 等待 直到任务完成,然后它让我执行另一个任务(显示错误:现在有一个事件的正在运行的任务。在执行另一个任务之前先终止它。(我有一个选项“终止正在运行的任务”,这只会导致错误已启动的进程不再存在。如果任务生成后台任务,退出 VS Code 可能会导致孤立进程。)。就好像 VS Code 监视所有已启动的子进程,或类似的事情。

有没有办法规避这种行为并让 VS Code“忘记”生成的后台进程?

最佳答案

我发现的一个棘手方法如下:

{
"windows": { "command": "powershell" },
"suppressTaskName": true,
"tasks": [
{"taskName": "test",
"args": [ "(New-Object -ComObject WScript.Shell).Run('notepad', 1, $false)" ] }
}

这将启动 notepad.exe 并且它将与 VS Code 实例完全分离(例如,您可以再次启动相同的任务,它不会提示)。

为什么有效?

VS Code 使用标准的 node.js child_process 模块来控制子进程 ( see processes.ts ),默认情况下它会监视子进程的管道状态。管道由任何 start 的进程实例派生,这就是 VS Code 检测整个进程子树状态的方式(这就是为什么你的 start 技巧在这里不起作用的原因)。

完全分 ionic 进程的最简单方法之一是使用 WScript.Shell COM 对象,这就是我选择 PowerShell 进行实现的原因。使用 cscript 和一个小脚本文件,或者使用使用 DETACHED_PROCESS 调用 Win32 API 函数 CreateProcess 的小帮助程序也可以实现同样的效果旗帜。

专业提示™:将 1 替换为 0 以在隐藏窗口中运行进程!

关于windows - 如何在 Windows 下的 VS Code 中运行后台任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41105361/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com