node.js - 如何杀死子进程/关闭Chrome?

标签 node.js child-process

让我们从代码开始:

#!/usr/bin/env node
const ChildProc = require('child_process');

const chrome = ChildProc.spawn('/usr/bin/google-chrome',['--incognito',`--app=data:text/html,<p>Hello World</p>`],{detached: true, stdio: 'ignore'});
chrome.unref();

setTimeout(() => {
  console.log('killing');
  chrome.kill();
}, 2500); // pretend we did some stuff, and now we're done with chrome.

我的 Chrome 窗口正在打开,但我无法以编程方式将其关闭。还有什么我可以尝试的吗?

最佳答案

我找到了chrome-launcher并查看了源代码。显然,实现这项工作的技巧是 --user-data-dir=/tmp/lighthouse.6ppUDxi 命令行标志。

例如,这有效:

#!/usr/bin/env node
const ChildProc = require('child_process');

function makeUnixTmpDir() {
  return ChildProc.execSync('mktemp -d -t lighthouse.XXXXXXX').toString().trim();
}

const chrome = ChildProc.spawn('/usr/bin/google-chrome',[
  '--disable-translate',
  '--disable-extensions',
  '--disable-background-networking',
  '--safebrowsing-disable-auto-update',
  '--disable-sync',
  '--metrics-recording-only',
  '--disable-default-apps',
  '--mute-audio',
  '--no-first-run',
  '--user-data-dir='+makeUnixTmpDir(),
  'https://google.com',
],{detached: true, stdio: 'ignore'});
// chrome.unref();

setTimeout(() => {
  console.log('killing');
  chrome.kill();
}, 5000); // pretend we did some stuff, and now we're done with chrome.

这可能与 Chrome 合并进程的方式有关,但我想如果窗口使用它自己的用户配置文件,它就不会这样做。

关于node.js - 如何杀死子进程/关闭Chrome?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56449752/

相关文章:

c - 多子进程

linux - 我如何了解在 Unix/Linux 上退出 Go 的未知子项?

json - ReactJS:JSON 文件是从本地主机而不是项目目录获取的

javascript - subprocess.on ("exit", () => {}) 如果手动按下 control-c 终止终端则不起作用

node.js - 2次API调用响应后执行代码

mysql - Node.js v10.20.1::> Sequelize findOne 速度太慢

javascript - 无法访问child_process API

node.js - Node 子进程生成标准输出返回为空

node.js - PhpStorm/WebStorm node_modules 和 package.json

node.js - 我可以将对象存储在 process.env 中吗