Как убить дочерний процесс / закрыть Chrome? - PullRequest
1 голос
/ 04 июня 2019

Начнем с кода:

#!/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 открывается, но я не могу заставить его закрываться программно. Могу ли я попробовать что-нибудь еще?

1 Ответ

0 голосов
/ 05 июня 2019

Я нашел 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 объединяет процессы, но ядумаю, этого не произойдет, если окно использует собственный профиль пользователя.

...