SQL Server 如何停止从 xp_cmdshell 运行的进程
Posted
技术标签:
【中文标题】SQL Server 如何停止从 xp_cmdshell 运行的进程【英文标题】:SQL server how stop process run from xp_cmdshell 【发布时间】:2020-04-28 07:57:07 【问题描述】:我尝试从我的电脑打开文件夹 通过在 sql server 中运行脚本
EXEC xp_cmdshell 'start C:\folder'
it 文件夹不exixt 并且进程仍在执行 然后我会杀死进程
但它仍然被杀死/回滚
现在该怎么办?
帮助!! 迈克尔
【问题讨论】:
如果外部进程(SQL Server 外部的)突然停止并且没有正确返回执行到 SQL Server 并且您尝试杀死 SQL Server 进程,那么您将看到这个KILLED/ROLLBACK
状态并获胜不幸的是,在服务器重新启动之前,无法从 SQL Server 中删除此进程。好消息是实际上没有执行任何操作,因此您不会浪费 CPU 时间。话虽如此,出于安全原因,不建议通过 SQL Server 启动 cmd 进程。
【参考方案1】:
打开cmd:
tasklist /fi "IMAGENAME eq cmd.exe" /fi "SESSIONNAME eq Services" /v
获取正在运行的会话的PID(假设是123456)
taskkill /PID 123456 /F
【讨论】:
Iptr - 谢谢!!我做了这确实解决了问题只是一个问题我怎么知道这正是我运行的 CMD 而不是连接到服务器或 SQL 服务器本身的任何人都可以运行?简而言之,阻止它有危险吗? 您可以检查要被杀死的进程(例如123456)的命令行并验证父进程是否为sqlserver:wmic process where "ProcessID=123456" get CommandLine, ParentPocessID
(假设ParentProcessID=45678)wmic process where "ProcessID=45678" get Name
以上是关于SQL Server 如何停止从 xp_cmdshell 运行的进程的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Azure SQL 迁移到 SQL Server? [复制]
如何从事件日志表计算 SQL Server 中的平均队列长度