如何在Deno应用外启动独立运行的终端进程?
在Deno中启动独立于主进程的子脚本
要让你的批处理脚本完全脱离Deno主进程,不会随主应用终止而停止,需要借助Windows系统的命令行工具创建独立进程,以下是两种可行方案:
方案一:使用cmd /c start命令
修改代码如下:
export const start_app = () => { Deno.run({ cmd: ["cmd", "/c", "start", "", "./main.bat"], stdin: "null", stdout: "null", stderr: "null", }); };
cmd /c start是Windows下创建独立进程的标准方式,start命令会为批处理脚本开启新的控制台会话,彻底脱离Deno主进程的控制。- 空字符串作为
start的第二个参数是为了避免将bat路径误判为窗口标题,若不需要显示控制台窗口,可添加/b参数(即start /b "" ./main.bat)。 - 设置
stdin、stdout、stderr为"null",切断子进程与Deno主进程的IO关联,进一步确保独立性。
方案二:使用PowerShell的Start-Process
若更倾向PowerShell环境,可采用此方式:
export const start_app = () => { Deno.run({ cmd: ["powershell", "-Command", "Start-Process", "-FilePath", "./main.bat"], stdin: "null", stdout: "null", stderr: "null", }); };
Start-Process会创建完全独立的进程,默认打开新窗口,添加-NoWindow参数可实现后台运行。
为什么之前的方法无效?
直接用Deno.run调用./main.bat时,子进程是Deno的直接子进程,Windows系统中父进程终止时会同步结束其所属会话内的子进程。而通过start或Start-Process创建的进程属于全新会话,与Deno主进程无关联,因此主进程退出后子进程仍能持续运行。
内容的提问来源于stack exchange,提问作者fudgemasterultra
相关产品推荐
相关产品推荐

