gpt4 book ai didi

javascript - Node.js 为什么子进程没有立即启动?

转载 作者:太空宇宙 更新时间:2023-11-03 22:36:41 25 4
gpt4 key购买 nike

我正在尝试编写一个全局 Node 命令行程序,它将接受我提供给它的任何(windows或unix)控制台命令并在新的控制台窗口中执行它。我还希望程序在生成进程后退出,这样我正在使用的控制台就不会被运行子进程的 Node 脚本阻止。

这是我迄今为止所拥有的简单版本:

myScript.js:

var exec = require('child_process').exec;
exec("start startScript.cmd"); // windows start command opens a new cmd window
process.exit(0);

startScript.cmd:

mkdir test

我也尝试过这个(但是即使没有 process.exit 这也不起作用):

myScript.js:

var spawn = require('child_process').spawn;
var child = spawn('start', ['startScript.cmd'], { detached: true, stdio: ['ignore', 'ignore', 'ignore']});
child.unref();
process.exit(0);

问题是,调用 process.exit() 似乎会阻止子进程完全启动,因此除非我执行一些 setTimeout 恶作剧,否则什么也不会发生。然而,这种行为似乎是随机的。在另一台计算机上,它的行为就像我想要的那样。两台计算机具有相同版本的 Node (v0.10.33)。

除非我删除 process.exit 行或对其使用 setTimeout,否则永远不会进行目录测试。

知道为什么会发生这种情况或者如何解决它吗?请记住,我不想等到子进程完成。我希望能够立即返回到我的命令行。

谢谢!

最佳答案

我明白了。

答案是:不要使用 exec,也不要在生成调用中使用 start 或 call 或任何其他奇怪的 Windows 命令。如果需要,请在生成选项中设置 CWD,然后直接生成您想要的内容,或者创建一个操作系统特定的脚本来调用您的命令(如果它仍然不起作用)。 Windows 脚本的一个示例实际上就是:

%*

这样,启动或任何其他奇怪的 Windows 命令都将正确执行(但你真的需要它们吗?)。

关于javascript - Node.js 为什么子进程没有立即启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26791900/

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