in src/legacyEdge/edgeDebugAdapter.ts [388:446]
private spawnEdge(edgePath: string, edgeArgs: string[], env: {[key: string]: string}, cwd: string, usingRuntimeExecutable: boolean): ChildProcess {
this.events.emitStepStarted('LaunchTarget.LaunchExe');
if (coreUtils.getPlatform() === coreUtils.Platform.Windows && !usingRuntimeExecutable) {
const options = {
execArgv: [],
silent: true
};
if (env) {
options['env'] = {
...process.env,
...env
};
}
if (cwd) {
options['cwd'] = cwd;
}
const edgeProc = fork(getEdgeSpawnHelperPath(), [edgePath, ...edgeArgs], options);
edgeProc.unref();
edgeProc.on('message', data => {
const pidStr = data.toString();
logger.log('got edge PID: ' + pidStr);
this._edgePID = parseInt(pidStr, 10);
});
edgeProc.on('error', (err) => {
const errMsg = 'edgeSpawnHelper error: ' + err;
logger.error(errMsg);
});
edgeProc.stderr.on('data', data => {
logger.error('[edgeSpawnHelper] ' + data.toString());
});
edgeProc.stdout.on('data', data => {
logger.log('[edgeSpawnHelper] ' + data.toString());
});
return edgeProc;
} else {
logger.log(`spawn('${edgePath}', ${JSON.stringify(edgeArgs) })`);
const options = {
detached: true,
stdio: ['ignore'],
};
if (env) {
options['env'] = {
...process.env,
...env
};
}
if (cwd) {
options['cwd'] = cwd;
}
const edgeProc = spawn(edgePath, edgeArgs, options);
edgeProc.unref();
return edgeProc;
}
}