我有一个使用 SQLite3 来维护数据库文件的控制台模式程序。执行需要一段时间,但在任何时候取消都应该是安全的,假设数据库写入发生了。(这都是Windows下的)
从正在运行的程序的角度来看,CtrlC在控制台中点击是否比让另一个程序在其上调用 TerminateProcess 更安全?
我注意到,如果调用 TerminateProcess,我可能会损坏数据库——我认为这是因为程序没有机会完成写入。我的猜测是CtrlC更好,因为程序收到一个信号并自行终止,而不是操作系统杀死它。
请注意,程序实际上并不处理信号(除非 SQLite 处理);我说的是 Win32 可执行文件的内置默认机制来处理CtrlC信号。
为了澄清/简化问题 - 鉴于此写入刚刚执行:
fwrite(buf, 1024*1024, 1, stream);
在此写入期间, TerminateProcess 的行为是否会与CtrlC?