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

问题描述:

我正在使用C++,Python 3.5和Windows 7.我目前使用子进程从我的Python代码调用C++可执行文件,然后使用以下代码终止可执行文件:当从Python子进程终止时的C++调用函数

open = Popen([path\to\exe]) 
open.terminate() 

这似乎不太可能,但是当Python调用终止它时,我的C++代码是否可以调用一个函数?我发现了当C++用X按钮或自己关闭时要调用的函数的选项,但这个问题太具体了。

为了能终止你的C++,你必须首先做的事情一样

p = subprocess.Popen(["path\to\exe"]) 
#... 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++程序(atexit就被称为当你调用明确exit,在这种情况下不工作):

(来源:How can I catch a ctrl-c event? (C++)

+0

非常感谢!在那种情况下,我能够使用std :: atexit在关闭时调用函数吗?如果没有,我怎么会得到我的代码对死亡作出反应? – OCW