diff --git a/arduino-ide-extension/src/node/arduino-daemon.ts b/arduino-ide-extension/src/node/arduino-daemon.ts index 59d6697a..c30de779 100644 --- a/arduino-ide-extension/src/node/arduino-daemon.ts +++ b/arduino-ide-extension/src/node/arduino-daemon.ts @@ -1,5 +1,5 @@ import * as os from 'os'; -import { exec } from 'child_process'; +import { exec, ChildProcess } from 'child_process'; import { join, resolve } from 'path'; import { inject, injectable, named } from 'inversify'; import { ILogger } from '@theia/core/lib/common/logger'; @@ -20,6 +20,8 @@ export class ArduinoDaemon implements BackendApplicationContribution { @inject(ToolOutputServiceServer) protected readonly toolOutputService: ToolOutputServiceServer; + protected process: ChildProcess | undefined; + protected isReady = new Deferred(); async onStart() { @@ -46,6 +48,8 @@ export class ArduinoDaemon implements BackendApplicationContribution { if (daemon.stderr) { daemon.on('exit', (code, signal) => DaemonLog.log(this.logger, `Daemon exited with code: ${code}. Signal was: ${signal}.`)); } + this.process = daemon; + await new Promise((resolve, reject) => setTimeout(resolve, 2000)); this.isReady.resolve(); } catch (error) { @@ -53,4 +57,13 @@ export class ArduinoDaemon implements BackendApplicationContribution { } } + onStop() { + if (!this.process) { + return; + } + + DaemonLog.log(this.logger, `Shutting down daemon.`); + this.process.kill("SIGTERM"); + } + }