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? [复制]

mssqlserver服务启动后又停止了?

SQL Server 报告服务:如何在打开时停止报告触发

如何从事件日志表计算 SQL Server 中的平均队列长度

Apache HTTP Server 在 SQL Server 上调用后停止工作

sqlserver 计算设备运行时长?