CompositeDisposable StartProcess(Process process, TimeSpan? monitorOutput = null,
            TimeSpan? monitorResponding = null) {
            process.Validate();
            process.Start();

            _launched.OnNext(Tuple.Create(process.StartInfo, process.Id));

            return SetupMonitoringDisposable(process, monitorOutput, monitorResponding);
        }