Some users have reported issues where child processes are not cleaned up after Codex exits (e.g., https://github.com/openai/codex/issues/1570). This is generally a tricky issue on operating systems: if a parent process receives `SIGKILL`, then it terminates immediately and cannot communicate with the child. **It only helps on Linux**, but this PR introduces the use of `prctl(2)` so that if the parent process dies, `SIGTERM` will be delivered to the child process. Whereas previously, I believe that if Codex spawned a long-running process (like `tsc --watch`) and the Codex process received `SIGKILL`, the `tsc --watch` process would be reparented to the init process and would never be killed. Now with the use of `prctl(2)`, the `tsc --watch` process should receive `SIGTERM` in that scenario. We still need to come up with a solution for macOS. I've started to look at `launchd`, but I'm researching a number of options.
72 lines
1.6 KiB
TOML
72 lines
1.6 KiB
TOML
[package]
|
|
name = "codex-core"
|
|
version = { workspace = true }
|
|
edition = "2024"
|
|
|
|
[lib]
|
|
name = "codex_core"
|
|
path = "src/lib.rs"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
anyhow = "1"
|
|
async-channel = "2.3.1"
|
|
base64 = "0.22"
|
|
bytes = "1.10.1"
|
|
codex-apply-patch = { path = "../apply-patch" }
|
|
codex-mcp-client = { path = "../mcp-client" }
|
|
dirs = "6"
|
|
env-flags = "0.1.1"
|
|
eventsource-stream = "0.2.3"
|
|
fs2 = "0.4.3"
|
|
futures = "0.3"
|
|
libc = "0.2.174"
|
|
mcp-types = { path = "../mcp-types" }
|
|
mime_guess = "2.0"
|
|
rand = "0.9"
|
|
reqwest = { version = "0.12", features = ["json", "stream"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
sha1 = "0.10.6"
|
|
strum_macros = "0.27.1"
|
|
thiserror = "2.0.12"
|
|
time = { version = "0.3", features = ["formatting", "local-offset", "macros"] }
|
|
tokio = { version = "1", features = [
|
|
"io-std",
|
|
"macros",
|
|
"process",
|
|
"rt-multi-thread",
|
|
"signal",
|
|
] }
|
|
tokio-util = "0.7.14"
|
|
toml = "0.9.1"
|
|
tracing = { version = "0.1.41", features = ["log"] }
|
|
tree-sitter = "0.25.3"
|
|
tree-sitter-bash = "0.25.0"
|
|
uuid = { version = "1", features = ["serde", "v4"] }
|
|
wildmatch = "2.4.0"
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
landlock = "0.4.1"
|
|
seccompiler = "0.5.0"
|
|
|
|
# Build OpenSSL from source for musl builds.
|
|
[target.x86_64-unknown-linux-musl.dependencies]
|
|
openssl-sys = { version = "*", features = ["vendored"] }
|
|
|
|
# Build OpenSSL from source for musl builds.
|
|
[target.aarch64-unknown-linux-musl.dependencies]
|
|
openssl-sys = { version = "*", features = ["vendored"] }
|
|
|
|
[dev-dependencies]
|
|
assert_cmd = "2"
|
|
maplit = "1.0.2"
|
|
predicates = "3"
|
|
pretty_assertions = "1.4.1"
|
|
tempfile = "3"
|
|
tokio-test = "0.4"
|
|
walkdir = "2.5.0"
|
|
wiremock = "0.6"
|