node.js - 如何从 node.js 作为单独的进程启动 Chrome 并立即返回?

标签 node.js google-chrome chromium

目标是使用child_process从nodejs启动Chrome或Chromium,并立即返回,类似于Windows START命令启动完全独立的进程并且调用进程可以立即退出。

child_process.execFile() 的 { shell: true } 选项几乎完成了这项工作,因为它将 Node 进程与 Chrome 进程分开;我可以使用 Ctrl+C 退出主 Nodejs 进程,并且启动的浏览器保持打开状态。如果没有该选项,他们将保持婚姻状态,并且 Node 中的 ^C 会关闭 Chrome.exe。

但是,我需要的是 Node 在启动 Chrome 后完全退出。按 ^C 显然没有不利影响。那么如果^C可以退出 Node ,为什么它不立即退出呢?我怀疑在 chrome 进程对象被销毁之前, Node 无法凭良心退出。

有趣的是:如果同一个 Chrome.exe 碰巧已经在运行,我正在启动的"new"Chrome 会在现有的 chrome 中启动一个新选项卡或窗口并退出。在这种情况下,nodejs 脚本会立即退出。

const child_process = require('child_process');
let ex = "C:\\PROGRA~2\\Google\\Chrome\\APPLIC~1\\chrome.exe";

let chrome = child_process.execFile(ex, [
// tried various Chromium switches here but nothing helped
], {
    shell: true, // this spawns a separate process but node won't exit
} , function(err, data) {
    console.log(err)
    console.log(data.toString());
});

chrome.stdout.on('data', function (data) {
    console.log('stdout: ' + data);
});

chrome.stderr.on('data', function (data) {
    console.log('stderr: ' + data);
});

chrome.on('exit', function (code) {
    console.log('child process exited with code ' + code);
// chrome.kill();
});

预期:既然nodejs可以用^C杀死,为什么它还会继续运行/阻塞?我希望它在启动 Chrome.exe 后退出。

然而,实际上,nodejs 会阻塞,直到我退出 Chrome 或按 ^C。

我也尝试过不使用回调函数和 .stdout、.stderr 和 .on 钩子(Hook)——它们似乎没有帮助或伤害。 Node 总是阻塞,直到 I ^C 或子进程(尽管是单独的)退出。

最佳答案

发帖r3wt的评论作为答案:使用 process.exit(0) 退出脚本且不会出现错误。它不会立即退出,因为正在运行 EventEmitter(s)

关于node.js - 如何从 node.js 作为单独的进程启动 Chrome 并立即返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56417823/

相关文章:

javascript - 如何从 div 元素的 ID 获取 Leaflet map 的 map 对象?

javascript - 使用 CreateJS 按下鼠标并移动会将 chrome Canvas 降低到 30FPS

javascript - Chromium 78 嵌套 iframe 中的指针事件失误

encryption - 如何在 CefPython 中添加 MP4(专有编解码器)支持

node.js - 是否可以通过 webhooks 发送不记名访问 token ?如果不是,我怎样才能通过代码做到这一点?

node.js - ExpressJS Router 不处理根路由

macos - "Google Chrome Helper"在哪个选项卡上运行?

python - 使用 headless 浏览器呈现 100,000 个页面,aws 上每秒每个 cpu 的最大值

javascript - 发布到 Node/快速端点的 Ajax 问题

javascript - 不同文件中的 Socket.io