2016-08-11 122 views
0

我正在使用C++,Python 3.5和Windows 7.我目前使用子進程從我的Python代碼調用C++可執行文件,然後使用以下代碼終止可執行文件:當從Python子進程終止時的C++調用函數

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

這似乎不太可能,但是當Python調用終止它時,我的C++代碼是否可以調用一個函數?我發現了當C++用X按鈕或自己關閉時要調用的函數的選項,但這個問題太具體了。

回答

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++)

+0

非常感謝!在那種情況下,我能夠使用std :: atexit在關閉時調用函數嗎?如果沒有,我怎麼會得到我的代碼對死亡作出反應? – OCW