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

时间:2016-08-11 18:37:41

标签: python c++ function exit terminate

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

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

这似乎不太可能,但是当Python调用终止时,我的C ++代码是否可以调用函数?我已经找到了在使用X按钮或单独关闭C ++时调用函数的选项,但这个问题太具体了。

1 个答案:

答案 0 :(得分:0)

为了能够终止你的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++)