提交 2a822c7c 编写于 作者: D Daniel Imms

Improve handling of process exit

上级 c5adbe44
......@@ -126,4 +126,8 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
public $sendProcessPid(terminalId: number, pid: number): void {
this._terminalProcesses[terminalId].emitPid(pid);
}
public $sendProcessExit(terminalId: number, exitCode: number): void {
this._terminalProcesses[terminalId].emitExit(exitCode);
}
}
......@@ -325,6 +325,7 @@ export interface MainThreadTerminalServiceShape extends IDisposable {
$sendProcessTitle(terminalId: number, title: string): void;
$sendProcessData(terminalId: number, data: string): void;
$sendProcessPid(terminalId: number, pid: number): void;
$sendProcessExit(terminalId: number, exitCode: number): void;
}
export interface MyQuickPickItems extends IPickOpenEntry {
......
......@@ -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;
......
......@@ -524,6 +524,7 @@ export interface ITerminalProcessExtHostProxy {
emitData(data: string): void;
emitTitle(title: string): void;
emitPid(pid: number): void;
emitExit(exitCode: number): void;
onInput(listener: (data: string) => void): IDisposable;
onResize(listener: (cols: number, rows: number) => void): IDisposable;
onShutdown(listener: () => void): IDisposable;
......
......@@ -667,7 +667,11 @@ export class TerminalInstance implements ITerminalInstance {
return a;
}).join(' ');
}
this._notificationService.error(nls.localize('terminal.integrated.launchFailed', 'The terminal process command \'{0}{1}\' failed to launch (exit code: {2})', this._shellLaunchConfig.executable, args, exitCode));
if (this._shellLaunchConfig.executable) {
this._notificationService.error(nls.localize('terminal.integrated.launchFailed', 'The terminal process command \'{0}{1}\' failed to launch (exit code: {2})', this._shellLaunchConfig.executable, args, exitCode));
} else {
this._notificationService.error(nls.localize('terminal.integrated.launchFailedExtHost', 'The terminal process failed to launch (exit code: {0})', exitCode));
}
} else {
if (this._configHelper.config.showExitAlert) {
this._notificationService.error(exitCodeMessage);
......
......@@ -28,13 +28,19 @@ export class TerminalProcessExtHostProxy extends EventEmitter implements ITermin
public emitData(data: string): void {
this.emit('message', { type: 'data', content: data } as IMessageFromTerminalProcess);
}
public emitTitle(title: string): void {
this.emit('message', { type: 'title', content: title } as IMessageFromTerminalProcess);
}
public emitPid(pid: number): void {
this.emit('message', { type: 'pid', content: pid } as IMessageFromTerminalProcess);
}
public emitExit(exitCode: number): void {
this.emit('exit', exitCode);
}
public send(message: IMessageToTerminalProcess): boolean {
switch (message.event) {
case 'input': this.emit('input', message.data); break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册