Improve handling of process exit

This commit is contained in:
Daniel Imms
2018-04-18 12:56:39 -07:00
parent c5adbe4401
commit 2a822c7c1d
6 changed files with 33 additions and 1 deletions

View File

@@ -233,6 +233,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
case 'data': this._proxy.$sendProcessData(id, <string>message.content); break;
}
});
this._terminalProcesses[id].on('exit', (exitCode) => this._onProcessExit(id, exitCode));
}
public $acceptProcessInput(id: number, data: string): void {
@@ -242,6 +243,7 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
}
public $acceptProcessResize(id: number, cols: number, rows: number): void {
console.log('send resize');
if (this._terminalProcesses[id].connected) {
this._terminalProcesses[id].send({ event: 'resize', cols, rows });
}
@@ -253,6 +255,20 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
}
}
private _onProcessExit(id: number, exitCode: number): void {
console.log('exit');
// Remove listeners
const process = this._terminalProcesses[id];
process.removeAllListeners('message');
process.removeAllListeners('exit');
// Remove process reference
delete this._terminalProcesses[id];
// Send exit event to main side
this._proxy.$sendProcessExit(id, exitCode);
}
private _getTerminalById(id: number): ExtHostTerminal {
let index = this._getTerminalIndexById(id);
return index !== null ? this._terminals[index] : null;