Stop-Process 是什么
Stop-Process 是 PowerShell 里结束进程的命令,可以按进程号或名称结束,-Force 用于强制终止。它的优势在于能与管道组合:先用 Get-Process 过滤出目标列表,确认无误再管道交给它,实现精确制导而不是粗暴全杀。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 |
|---|---|
| 语法 | Stop-Process -Id 编号 [-Force];Stop-Process -Name 名称 [-Force] |
| 安全用法 | 先用 Get-Process 过滤并查看列表,再管道结束 |
| 预演 | Stop-Process -Id 编号 -WhatIf |
| 权限要求 | 结束其他用户或系统进程需要管理员权限 |
| 同类命令 | taskkill 支持按用户名、状态等条件过滤 |
典型使用场景
- 结束无响应的程序,先用 -WhatIf 预演一遍
- 批量结束某类测试进程,提前用管道过滤避免误杀
- 排查内存或句柄问题时先列出目标进程再逐个处理
- 脚本收尾阶段清理自己启动的子进程
- 结合内存排序,处理占用异常高的进程
常用示例
常用示例
# 先看清目标,再决定结束谁
Get-Process notepad | Select-Object Id, Name, StartTime
# 预演:只显示将要结束的对象
Stop-Process -Id 4321 -WhatIf
# 按名称结束,会命中全部同名进程
Stop-Process -Name notepad -Force
# 管道写法,精确结束过滤后的对象
Get-Process -Id 4321 | Stop-Process -Force
# 结束之后再确认没有残留
Get-Process notepad -ErrorAction SilentlyContinue参数与风险
| 参数 | 作用 | 风险 |
|---|---|---|
| -Id 编号 | 精确结束指定进程 | 编号会被复用,动手前应确认目标 |
| -Name 名称 | 结束全部同名进程 | 多实例环境容易误伤 |
| -Force | 强制终止 | 程序没有机会保存与清理 |
| -WhatIf | 只显示将要结束的对象 | 无风险,建议先跑一次 |
| -Confirm | 对每个对象逐一确认 | 批量场景下会阻塞脚本 |
用名称匹配会结束所有同名进程,多用户或多实例环境中容易误伤。稳妥做法是先列出进程号与启动时间,确认后再按编号结束。
由服务托管的进程(例如 Web 服务器的工作进程)应通过服务控制来停止,直接杀进程会让服务状态异常,甚至触发自动恢复机制反复重启。