1114482046
Terminal::stopping did child.kill() (error ignored) and then a blocking child.wait() on the actix worker thread. Since the 0.3.11 privilege drop, sessions run as `demo` and the server had no CAP_KILL, so kill() failed with EPERM and wait() blocked forever. With two workers, exactly every other request to :8082 then timed out — 5 days of readiness/liveness flapping on socktop.io and orphaned restricted-shell/socktop processes piling up in the pods. - Signal the session's whole process group (portable-pty setsid()s the child), not just the shell: a non-interactive bash defers signals while a foreground command runs, so the old SIGHUP/SIGKILL to the shell alone orphaned socktop anyway. - Reap on a dedicated thread: SIGHUP, 2 s grace, SIGKILL, 10 s deadline, then a blocking wait on that thread only. Signal failures are logged. - Drop the pty handles before handing off the child. - kubernetes/03-deployment.yaml: add CAP_KILL (sessions still lose every cap via setpriv). CI never applies the manifest — it was patched live. - tests/reaper_tests.rs pins the non-blocking return, process-group kill, and SIGHUP→SIGKILL escalation. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
43 lines
1.2 KiB
TOML
43 lines
1.2 KiB
TOML
[package]
|
|
name = "webterm"
|
|
description = "socktop xterm.js - based webterminal"
|
|
repository = "https://gt.wittyoneoff.com/jason/socktop-webterm"
|
|
documentation = "https://docs.rs/webterm"
|
|
readme = "README.md"
|
|
categories = ["web-programming", "web-programming::websocket", "web-programming::http-server", "command-line-utilities"]
|
|
keywords = ["terminal", "xterm", "websocket", "terminus", "console"]
|
|
version = "0.3.12"
|
|
authors = ["fabian.freyer@physik.tu-berlin.de","jasonpwitty+socktop@proton.me"]
|
|
edition = "2021"
|
|
license = "BSD-3-Clause"
|
|
|
|
[dependencies]
|
|
actix-files = "0.6"
|
|
actix-web = "4.9"
|
|
actix-web-actors = "4.3"
|
|
actix = "0.13"
|
|
actix-rt = "2.10"
|
|
futures = "0.3"
|
|
handlebars = "6.3"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1.0"
|
|
clap = { version = "4.5", features = ["derive"] }
|
|
tokio = { version = "1.42", features = ["full"] }
|
|
tokio-util = { version = "0.7", features = ["codec"] }
|
|
portable-pty = "0.8"
|
|
bytes = "1.9"
|
|
log = "0.4"
|
|
env_logger = "0.11"
|
|
libc = "0.2"
|
|
pop-telemetry = { git = "https://github.com/jasonwitty/pop-cli", branch = "main" }
|
|
dirs = "5.0"
|
|
regex = "1.10"
|
|
|
|
[lib]
|
|
name = "webterm"
|
|
path = "src/lib.rs"
|
|
|
|
[[bin]]
|
|
name = "webterm-server"
|
|
path = "src/server.rs"
|