powershell 可以用 start-process -passthru 取得进程对象,再用 wait-process -timeout 限定等待时间,超时后按 pid 结束该进程。强制终止可能丢失未保存数据或留下半完成写入,所以应只针对自己启动、确认可中止的程序,并先尝试正常关闭。
启动程序并保存进程对象
先运行 $p = Start-Process notepad.exe -PassThru。图中的 Windows PowerShell 使用 Start-Process 打开记事本,说明程序会作为独立进程启动;加入 -PassThru 后,变量还会保存该次启动对应的 PID,避免误杀同名的其他进程。

设置等待秒数并捕获超时
执行 try { Wait-Process -Id $p.Id -Timeout 30 -ErrorAction Stop } catch { Stop-Process -Id $p.Id -Force }。图中的 PowerShell 循环会定时检查记事本是否仍在运行,展示了等待、再次检查的实际过程;Wait-Process -Timeout 则把这段等待封装成秒数限制。必须加 -ErrorAction Stop,超时错误才会进入 catch。

终止后再次确认进程已经退出
图中管理员 PowerShell 执行 Stop-Process -Name notepad -Force 后直接返回提示符,表示命令已提交。脚本中更安全的写法是 Stop-Process -Id $p.Id -Force,随后运行 Get-Process -Id $p.Id -ErrorAction SilentlyContinue;没有返回对象才算退出。若程序涉及安装、更新或数据库写入,不应强制终止,应改为延长超时或调用程序自己的取消机制。


















