mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-17 10:15:27 -04:00
fix(cookbook): stop local Windows process trees
Track the inner Bash runner PID for local Windows Cookbook tasks and stop the full child process tree during cleanup.
This commit is contained in:
@@ -354,7 +354,11 @@ def setup_cookbook_routes() -> APIRouter:
|
|||||||
# all output to the log the poller reads. Paths handed to bash use
|
# all output to the log the poller reads. Paths handed to bash use
|
||||||
# POSIX form + shell-quoting so drive paths / spaces survive.
|
# POSIX form + shell-quoting so drive paths / spaces survive.
|
||||||
inner = TMUX_LOG_DIR / f"{session_id}_run.sh"
|
inner = TMUX_LOG_DIR / f"{session_id}_run.sh"
|
||||||
inner.write_text("\n".join(bash_lines) + "\n", encoding="utf-8")
|
pp = shlex.quote(pid_path.as_posix())
|
||||||
|
inner.write_text(
|
||||||
|
f"printf '%s\\n' \"$$\" > {pp}\n" + "\n".join(bash_lines) + "\n",
|
||||||
|
encoding="utf-8",
|
||||||
|
)
|
||||||
lp = shlex.quote(log_path.as_posix())
|
lp = shlex.quote(log_path.as_posix())
|
||||||
ip = shlex.quote(inner.as_posix())
|
ip = shlex.quote(inner.as_posix())
|
||||||
script_path = TMUX_LOG_DIR / f"{session_id}.sh"
|
script_path = TMUX_LOG_DIR / f"{session_id}.sh"
|
||||||
|
|||||||
@@ -793,9 +793,10 @@ function _winSessionCmd(task, tmuxArgs) {
|
|||||||
return host ? `ssh ${pf}${host} "powershell -Command \\"${ps}\\""` : `powershell -Command "${ps}"`;
|
return host ? `ssh ${pf}${host} "powershell -Command \\"${ps}\\""` : `powershell -Command "${ps}"`;
|
||||||
}
|
}
|
||||||
if (tmuxArgs.includes('kill-session')) {
|
if (tmuxArgs.includes('kill-session')) {
|
||||||
|
const stopTree = `function Stop-Tree([int]$Id) { Get-CimInstance Win32_Process -Filter "ParentProcessId = $Id" -ErrorAction SilentlyContinue | ForEach-Object { Stop-Tree ([int]$_.ProcessId) }; Stop-Process -Id $Id -Force -ErrorAction SilentlyContinue }`;
|
||||||
const ps = host
|
const ps = host
|
||||||
? `$p = Get-Content '${sd}\\${sid}.pid' -ErrorAction SilentlyContinue; if ($p) { Stop-Process -Id $p -Force -ErrorAction SilentlyContinue }; Remove-Item '${sd}\\${sid}.*' -Force -ErrorAction SilentlyContinue`
|
? `${stopTree}; $p = Get-Content '${sd}\\${sid}.pid' -ErrorAction SilentlyContinue; if ($p -match '^\\d+$') { Stop-Tree ([int]$p) }; Remove-Item '${sd}\\${sid}.*' -Force -ErrorAction SilentlyContinue`
|
||||||
: `$p = Get-Content (Join-Path $env:TEMP 'odysseus-tmux\\${sid}.pid') -ErrorAction SilentlyContinue; if ($p) { Stop-Process -Id $p -Force -ErrorAction SilentlyContinue }; Remove-Item (Join-Path $env:TEMP 'odysseus-tmux\\${sid}.*') -Force -ErrorAction SilentlyContinue`;
|
: `${stopTree}; $p = Get-Content (Join-Path $env:TEMP 'odysseus-tmux\\${sid}.pid') -ErrorAction SilentlyContinue; if ($p -match '^\\d+$') { Stop-Tree ([int]$p) }; Remove-Item (Join-Path $env:TEMP 'odysseus-tmux\\${sid}.*') -Force -ErrorAction SilentlyContinue`;
|
||||||
return host ? `ssh ${pf}${host} "powershell -Command \\"${ps}\\""` : `powershell -Command "${ps}"`;
|
return host ? `ssh ${pf}${host} "powershell -Command \\"${ps}\\""` : `powershell -Command "${ps}"`;
|
||||||
}
|
}
|
||||||
if (tmuxArgs.includes('send-keys') && tmuxArgs.includes('C-c')) {
|
if (tmuxArgs.includes('send-keys') && tmuxArgs.includes('C-c')) {
|
||||||
|
|||||||
@@ -706,6 +706,16 @@ def test_llama_cpp_rebuild_cmd_clears_cached_build_paths():
|
|||||||
assert 'curl' not in cmd and 'wget' not in cmd
|
assert 'curl' not in cmd and 'wget' not in cmd
|
||||||
|
|
||||||
|
|
||||||
|
def test_local_windows_download_pid_tracks_inner_bash_and_stop_kills_tree():
|
||||||
|
routes_src = (Path(__file__).resolve().parents[1] / "routes" / "cookbook_routes.py").read_text(encoding="utf-8")
|
||||||
|
running_src = (Path(__file__).resolve().parents[1] / "static" / "js" / "cookbookRunning.js").read_text(encoding="utf-8")
|
||||||
|
|
||||||
|
assert 'printf \'%s\\\\n\' \\"$$\\" > {pp}' in routes_src
|
||||||
|
assert "function Stop-Tree([int]$Id)" in running_src
|
||||||
|
assert "ParentProcessId = $Id" in running_src
|
||||||
|
assert "Stop-Tree ([int]$p)" in running_src
|
||||||
|
|
||||||
|
|
||||||
def test_llama_cpp_rebuild_cmd_runs_clean_on_a_fresh_home(tmp_path):
|
def test_llama_cpp_rebuild_cmd_runs_clean_on_a_fresh_home(tmp_path):
|
||||||
"""The command should succeed even when neither path exists yet."""
|
"""The command should succeed even when neither path exists yet."""
|
||||||
import os
|
import os
|
||||||
|
|||||||
Reference in New Issue
Block a user