private spawnEdge()

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;
        }
    }