C++ “如何退出”;mysql.exe“;通过写入其输入流进行处理(使用CreateProcess()创建的进程)

C++ “如何退出”;mysql.exe“;通过写入其输入流进行处理(使用CreateProcess()创建的进程),c++,mysql,C++,Mysql,我正在尝试优雅地退出mysql.exe,它是使用Windows API中的CreateProcess()创建的。我的问题是mysql.exe没有被杀死。如果我在主线程休眠一段时间后终止进程,那么我正在写入其输入流(使用管道)的数据库的“转储”应用不正确 我正在发送刷新表;退出作为输入流的最后一个命令。不要使用终止进程终止进程 而是发送FLUSH\u表;退出命令,并使用WaitForSingleObject(HPProcess)等待它完成正在执行的操作。两个答案: 使用刷新表;退出\n写入输入文件

我正在尝试优雅地退出mysql.exe,它是使用Windows API中的
CreateProcess()
创建的。我的问题是
mysql.exe
没有被杀死。如果我在主线程休眠一段时间后终止进程,那么我正在写入其输入流(使用管道)的数据库的“转储”应用不正确


我正在发送
刷新表;退出
作为输入流的最后一个命令。

不要使用
终止进程
终止进程

而是发送
FLUSH\u表;退出命令,并使用
WaitForSingleObject(HPProcess)
等待它完成正在执行的操作。

两个答案:

  • 使用
    刷新表;退出\n写入输入文件流时。工作正常

  • 继承句柄 使用安全属性和
    SetHandleInformation()
    。请参阅msdn以了解此信息


  • 你能发布你的代码吗,特别是你运行的命令行是什么?(设置了任何标志等)或配置选项还有,当您向我发送“FLUSH_TABLES;EXIT;”-时会发生什么情况?这样做是正确的。@sreekar进程句柄在其进程退出时设置为信号状态。等待进程句柄等待它退出。@Sreekar,你对MySQL进程的输出做什么?您必须读取STDOUT和STDERR的所有输出,否则MySQL进程将等待您。@Ben只有在出现任何错误时,我才读取STDOUT和STDERR。我的申请表中不需要它们。当我在继承后关闭句柄时,一切都很好,因为ReadFile(来自linux的open()系统调用)将失败,因此mysql.exe正在退出…非常感谢Ben花时间和耐心。。