src/vs/workbench/services/search/electron-browser/searchService.ts/DiskSearch/constructor
class DiskSearch:	constructor(
		verboseLogging: boolean,
		searchDebug: IDebugParams | undefined,
		@ILogService private readonly logService: ILogService,
		@IConfigurationService private readonly configService: IConfigurationService,
		@ILifecycleService private readonly lifecycleService: ILifecycleService
	) {
		const timeout = this.configService.getValue<ISearchConfiguration>().search.maintainFileSearchCache ?
			100 * 60 * 60 * 1000 :
			60 * 60 * 1000;

		const opts: IIPCOptions = {
			serverName: 'Search',
			timeout,
			args: ['--type=searchService'],
			// Pass in fresh execArgv to the forked process such that it doesn't inherit them from `process.execArgv`.
			freshExecArgv: true,
			env: {
				VSCODE_AMD_ENTRYPOINT: 'vs/workbench/services/search/node/searchApp',
				VSCODE_PIPE_LOGGING: 'true',
				VSCODE_VERBOSE_LOGGING: verboseLogging
			},
			useQueue: true
		};

		if (searchDebug) {
			if (searchDebug.break && searchDebug.port) {
				opts.debugBrk = searchDebug.port;
			} else if (!searchDebug.break && searchDebug.port) {
				opts.debug = searchDebug.port;
			}
		}

		const client = new Client(FileAccess.asFileUri('bootstrap-fork', require).fsPath, opts);
		const channel = getNextTickChannel(client.getChannel('search'));
		this.raw = new SearchChannelClient(channel);

		this.lifecycleService.onWillShutdown(_ => client.dispose());
	}