Files
app-cli/dev/stop.ps1
toom1996 e366ee7498 chore: 初始化 app-cli,本地开发环境脚本
- dev/dev.ps1: 一键启动后端(编译后运行)+前端(4321),校验 CORS 与 astro dev 单实例锁
- dev/stop.ps1: 按 PID 登记停止,-Force 清残留
- dev/status.ps1: 端口/PID/健康检查一览
- dev/doctor.ps1: 工具链/路径/依赖/数据库/端口/CORS 体检
- vision/vision.ps1: CLIP 向量服务起停
- lib/common.ps1: 路径探测、端口、进程登记、HTTP 探测
- config/local.env.example: 路径与端口覆盖模板
2026-10-22 10:37:59 +08:00

68 lines
2.2 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# dev/stop.ps1 — 停掉本地开发环境
#
# 先按 .run\ 里登记的 PID 停(连子进程一起杀),
# 再检查端口上是否还残留「本脚本管不到」的进程,报告但不强杀(除非 -Force)。
param(
[switch]$Force
)
$ErrorActionPreference = 'Stop'
$CliRoot = Split-Path -Parent $PSScriptRoot
. (Join-Path $CliRoot 'lib\common.ps1')
$envMap = Import-LocalEnv (Join-Path $CliRoot 'config\local.env')
$backendPort = [int](Get-Setting $envMap 'BACKEND_PORT' '8090')
$frontendPort = [int](Get-Setting $envMap 'FRONTEND_PORT' '4321')
$visionPort = [int](Get-Setting $envMap 'VISION_PORT' '8900')
Write-Host ''
Write-Host ' 停止本地开发环境' -ForegroundColor White
Write-Host ' ----------------------------------------' -ForegroundColor DarkGray
$services = @(
@{ Name = 'frontend'; Port = $frontendPort },
@{ Name = 'backend'; Port = $backendPort },
@{ Name = 'vision'; Port = $visionPort }
)
foreach ($s in $services) {
if (Stop-NamedService $s.Name) {
Write-Ok "$($s.Name) 已停止"
} else {
Write-Note "$($s.Name) 未在本脚本登记(可能没启动过)"
}
}
# 后端占了三个端口,只停 8090 后 8091/8092 会随进程一起消失,这里只做残留检查
Write-Host ''
$leftover = @()
foreach ($port in @($backendPort, 8091, 8092, $frontendPort, $visionPort)) {
if (-not (Test-PortInUse $port)) { continue }
$owner = Get-PortOwnerPid $port
$leftover += [PSCustomObject]@{ Port = $port; Pid = $owner }
}
if ($leftover.Count -eq 0) {
Write-Ok '相关端口已全部释放'
exit 0
}
foreach ($l in $leftover) {
Write-Warn ("端口 " + $l.Port + " 仍被 PID " + $l.Pid + " 占用")
}
if ($Force) {
foreach ($id in ($leftover | Select-Object -ExpandProperty Pid | Sort-Object -Unique)) {
Stop-PidTree $id | Out-Null
Write-Ok "已终止 PID $id"
}
Write-Host ''
foreach ($port in @($backendPort, 8091, 8092, $frontendPort, $visionPort)) {
if (Test-PortInUse $port) { Write-Warn "端口 $port 仍被占用" }
}
} else {
Write-Note '这些进程不是本脚本启动的(例如手动 go run / npm run dev 留下的)。'
Write-Note '需要一起停掉就加 -Force:.\dev\stop.ps1 -Force'
}