从Python子进程终止时的c++调用函数

C++ Call Function When Terminated from Python Subprocess

本文关键字:c++ 调用 函数 Python 子进程 终止      更新时间:2023-10-16

我使用c++, Python 3.5和Windows 7。我目前正在使用subprocess从Python代码调用c++可执行文件,然后使用以下代码终止可执行文件:

open = Popen([pathtoexe])
open.terminate()

这似乎不太可能,但是当Python调用终止时,我的c++代码是否有可能调用函数本身?

我已经找到了当c++用X按钮关闭或自己关闭时调用函数的选项,但这个问题太具体了。

要能够终止你的c++代码,你必须首先做像

这样的事情
p = subprocess.Popen(["pathtoexe"])
#... do stuff
#and when you want to terminate it
p.terminate()

但是你不能再次调用Popen,因为它会产生另一个实例,这将立即杀死:无用。

当您终止进程时,它会像kill -9taskkill /F一样在那里停止。如果你想给过程一个反应的机会,这样做而不是p.terminate()

Windows:

os.system("taskkill /PID "+str(p.pid))

Unix,Windows(只是在文档中阅读,但没有测试):

os.kill(p.pid,signal.CTRL_BREAK_EVENT)

(省略/F标志允许在c++程序中放置句柄来执行一些退出/清理过程,然后退出)

编辑:在c++程序中放置一个句柄(当你显式调用exit时,atexit只是被调用,在这种情况下不工作):
  • Unix: using signal这已经解释了一百万次了
  • Windows:示例如下:https://msdn.microsoft.com/en-us/library/ms685049(VS.85).aspx。我已经测试过了,当你关闭窗口并按CTRL+C
  • 时,它可以工作

(来源:如何捕获ctrl-c事件?)(c++))