【发布时间】:2012-03-08 15:45:07
【问题描述】:
我在使用 xp_cmdshell 时遇到了挂起问题。
可执行文件被调用,执行它的工作,然后退出。由于 exe 中的 ui 提示,它没有挂起。 exe根本没有挂起。该exe从任务管理器的进程列表中消失,并且该exe的内部日志确认它执行了主函数中的最后一行
对 xp_cmdshell 的调用不会返回 SQL 中的控制权。它挂在该行上(它是该批次的最后一行)。杀死进程是无效的。它实际上需要重新启动 sql server 才能摆脱挂起的进程(ugh)
挂起仅在第一次运行时发生。只要第一个被挂起,对具有相同参数的过程的后续调用就可以正常工作并正确退出。一旦 SQL 重新启动,第一个后续调用将再次挂起。
-
如果有什么不同,我正在尝试从 exe 接收返回值——我的 sql 过程以:
exec @i = xp_cmdshell @cmd; 返回@i;
Activity Monitor 报告进程停留在等待类型 PREEMPTIVE_OS_PROCESSOPS(其他开发人员看到的)或 PREEMPTIVE_OS_PIPEOPS(我在当前测试中看到的)
有什么想法吗?
【问题讨论】:
-
当您不理会
@i时会发生什么,例如只是exec xp_cmdshell @cmd;? -
没试过。我需要等待一个可以重新启动 SQL Server 的窗口。关于如何杀死这个单一进程的任何想法,所以我们不必采取如此激烈的步骤?
标签: sql-server-2008 xp-cmdshell