killApp function
Stops the running app process referenced by the session's PID file.
Returns KillSuccess on success, KillNoSession if no PID file is
present, or KillFailed if the process refused to die after SIGKILL.
sendSignal defaults to Process.killPid; tests pass a fake so they never
send real signals.
Implementation
Future<KillResult> killApp(KillInput _, {ProcessSignaller sendSignal = Process.killPid}) async {
if (!hasMeaningfulSessionFiles()) {
return const KillNoSession();
}
final logCollectorStopped = await _stopLogCollector(sendSignal);
final controllerStopped = await _stopThroughController();
if (controllerStopped) {
final visibleProcessesStopped = await _stopVisibleSessionProcesses(sendSignal);
cleanupTempFiles();
if (logCollectorStopped && visibleProcessesStopped) {
return const KillSuccess();
}
return const KillFailed();
}
final fallbackStopped = await _stopVisibleSessionProcesses(sendSignal);
cleanupTempFiles();
if (logCollectorStopped && fallbackStopped) {
return const KillSuccess();
}
return const KillFailed();
}