| [CmdletBinding()] | |
| param() | |
| $ErrorActionPreference = "Stop" | |
| $runtimeRoot = (Resolve-Path (Join-Path $PSScriptRoot "..\.local\llama.cpp")).Path | |
| $pidPath = Join-Path $runtimeRoot "server.pid" | |
| if (-not (Test-Path $pidPath)) { | |
| Write-Output "No recorded llama.cpp server process." | |
| exit 0 | |
| } | |
| $recordedPid = Get-Content $pidPath -Raw | |
| if ([string]::IsNullOrWhiteSpace($recordedPid)) { | |
| Write-Output "No recorded llama.cpp server process." | |
| exit 0 | |
| } | |
| $recordedPid = $recordedPid.Trim() | |
| $serverPid = [int]$recordedPid | |
| $process = Get-Process -Id $serverPid -ErrorAction SilentlyContinue | |
| if (-not $process) { | |
| Set-Content -LiteralPath $pidPath -Value "" -Encoding ASCII -NoNewline | |
| Write-Output "Removed stale llama.cpp PID file." | |
| exit 0 | |
| } | |
| $expectedRoot = (Resolve-Path $runtimeRoot).Path | |
| $processPath = $process.Path | |
| if ( | |
| $process.ProcessName -ne "llama-server" -or | |
| -not $processPath.StartsWith($expectedRoot, [System.StringComparison]::OrdinalIgnoreCase) | |
| ) { | |
| throw "PID $serverPid is not the expected repository-owned llama-server process; refusing to stop it." | |
| } | |
| Stop-Process -Id $serverPid -Force | |
| Wait-Process -Id $serverPid -Timeout 15 -ErrorAction SilentlyContinue | |
| Set-Content -LiteralPath $pidPath -Value "" -Encoding ASCII -NoNewline | |
| Write-Output "Stopped llama-server PID $serverPid." | |