当从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 -9
或taskkill /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
,在这种情况下不工作):
- Unix的:使用信号。这已被解释了一百万次
- Windows:示例:https://msdn.microsoft.com/en-us/library/ms685049(VS.85).aspx。我测试了它,当你关闭该窗口它的工作原理,用CTRL + C
非常感谢!在那种情况下,我能够使用std :: atexit在关闭时调用函数吗?如果没有,我怎么会得到我的代码对死亡作出反应? – OCW