mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Simplify and fix stopShell conditional, fix shell processes not being killed
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
5e30aa9dae
commit
62d68d91e3
@ -191,14 +191,18 @@ export abstract class ShellSession {
|
|||||||
this.running = true;
|
this.running = true;
|
||||||
shellProcess.onData(data => this.send({ type: TerminalChannels.STDOUT, data }));
|
shellProcess.onData(data => this.send({ type: TerminalChannels.STDOUT, data }));
|
||||||
shellProcess.onExit(({ exitCode }) => {
|
shellProcess.onExit(({ exitCode }) => {
|
||||||
logger.info(`[SHELL-SESSION]: shell has exited for ${this.terminalId} closed with code=${exitCode}`);
|
logger.info(`[SHELL-SESSION]: shell has exited for ${this.terminalId} closed with exitcode=${exitCode}`);
|
||||||
this.running = false;
|
|
||||||
|
|
||||||
if (exitCode > 0) {
|
// This might already be false because of the kill() within the websocket.on("close") handler
|
||||||
this.send({ type: TerminalChannels.STDOUT, data: "Terminal will auto-close in 15 seconds ..." });
|
if (this.running) {
|
||||||
setTimeout(() => this.exit(), 15 * 1000);
|
this.running = false;
|
||||||
} else {
|
|
||||||
this.exit();
|
if (exitCode > 0) {
|
||||||
|
this.send({ type: TerminalChannels.STDOUT, data: "Terminal will auto-close in 15 seconds ..." });
|
||||||
|
setTimeout(() => this.exit(), 15 * 1000);
|
||||||
|
} else {
|
||||||
|
this.exit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -231,25 +235,27 @@ export abstract class ShellSession {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.on("close", code => {
|
.on("close", code => {
|
||||||
logger.info(`[SHELL-SESSION]: websocket for ${this.terminalId} closed with code=${code}`);
|
logger.info(`[SHELL-SESSION]: websocket for ${this.terminalId} closed with code=${WebSocketCloseEvent[code]}(${code})`, { cluster: this.cluster.getMeta() });
|
||||||
|
|
||||||
const stopShellSession = this.running
|
const stopShellSession = this.running
|
||||||
&& !(
|
&& (
|
||||||
code === WebSocketCloseEvent.AbnormalClosure
|
(
|
||||||
|| (
|
code !== WebSocketCloseEvent.AbnormalClosure
|
||||||
code === WebSocketCloseEvent.GoingAway
|
&& code !== WebSocketCloseEvent.GoingAway
|
||||||
&& !this.cluster.disconnected
|
|
||||||
)
|
)
|
||||||
|
|| this.cluster.disconnected
|
||||||
);
|
);
|
||||||
|
|
||||||
if (stopShellSession) {
|
if (stopShellSession) {
|
||||||
try {
|
|
||||||
logger.info(`[SHELL-SESSION]: Killing shell process for ${this.terminalId}`);
|
|
||||||
process.kill(shellProcess.pid);
|
|
||||||
ShellSession.processes.delete(this.terminalId);
|
|
||||||
} catch {}
|
|
||||||
|
|
||||||
this.running = false;
|
this.running = false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
logger.info(`[SHELL-SESSION]: Killing shell process (pid=${shellProcess.pid}) for ${this.terminalId}`);
|
||||||
|
shellProcess.kill();
|
||||||
|
ShellSession.processes.delete(this.terminalId);
|
||||||
|
} catch (error) {
|
||||||
|
logger.warn(`[SHELL-SESSION]: failed to kill shell process (pid=${shellProcess.pid}) for ${this.terminalId}`, error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user