gpt4 book ai didi

windows - sqlite3.exe : How to stop a long-running SQL statement

转载 作者:行者123 更新时间:2023-12-03 19:41:28 27 4
gpt4 key购买 nike

如何停止在 Windows 上运行的 sqlite3.exe 中长时间运行的 SQL 语句?

http://www.sqlite.org/cli.html 上的文档陈述如下

You can terminate the sqlite3 program by typing your systems End-Of-File character (usually a Control-D). Use the interrupt character (usually a Control-C) to stop a long-running SQL statement.



但在 Windows 上,Control-D 什么都不做,并且 Control-C 终止 sqlite3 程序。

我也尝试过与 Control-C 相同的 Break(即 Control-Pause)

有任何想法吗?

最佳答案

它似乎只是 Windows 上的一个错误。

查看 C source code as an amalgamation, version 3.8.8.3. 中的代码来自 SQLite download page ,我在 shell.c 中看到,有 SIGINT 的处理程序(对应于 Windows 上的 Control-C)如果 SIGINT 注册被定义为:

#ifdef SIGINT
signal(SIGINT, interrupt_handler);
#endif
SIGINTsignal.h 中定义,但在 Windows 上被故意排除在外:
#if !defined(_WIN32) && !defined(WIN32)
# include <signal.h>
# if !defined(__RTP__) && !defined(_WRS_KERNEL)
# include <pwd.h>
# endif
# include <unistd.h>
# include <sys/types.h>
#endif

其中 signal.h导致信号处理程序被注册,并且我确实得到了中断(没有进程终止!)到一个长时间运行的 SQL 命令,如预期的那样。

但是,这对于后续的 Control-C 事件(例如,如果您想在 session 中中断第二个长时间运行的命令)和 signal(SIGINT,...) 并不可靠。是 documented as unsupported用于 MSDN 上的 Win32 应用程序。

使用特定于 Windows 的 SetConsoleCtrlHandler 而不是 signal(SIGINT,...)注册一个中断处理程序可以可靠地为后续的 Control-C 事件工作。

这是 shell.c 的差异对于使用 SetConsoleCtrlHandler 提及的源版本:
757c757
< #ifdef SIGINT
---
> #if defined(SIGINT) || defined(_WIN32) || defined(WIN32)
766a767,782
>
> #if defined(_WIN32) || defined(WIN32)
> /*
> ** Windows event handler
> */
> BOOL WINAPI CtrlHandler(DWORD dwType){
> switch( dwType ){
> case CTRL_C_EVENT:
> interrupt_handler(0);
> return TRUE;
>
> default:
> return FALSE;
> }
> }
> #endif
4207a4224,4225
> #elif defined(WIN32) || defined(_WIN32)
> SetConsoleCtrlHandler(CtrlHandler, TRUE);

可以通过将合并中的所有源文件添加到 Visual Studio C++ 控制台项目来轻松构建 shell(除了构建所需的标准/系统头文件之外,没有外部依赖项)。

我已经向 SQLite 用户邮件列表发送了一条消息,通知他们该错误。

关于windows - sqlite3.exe : How to stop a long-running SQL statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28562454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com