我遇到與TerminateProcess()函數有關的問題。 我正在編寫一個JobScheduler應用程序,該應用程序在特定時間安排和啓動作業。 爲此,我使用CreateProcess()來執行我的JobLauncher。正確關閉應用程序:TerminateProcess的替代方法
的JobLauncher過程然後啓動其有效地執行該作業執行時,等待其結束,並監視持續時間,用戶和內核倍經過等
爲了殺死從作業控制檯程序(使用的CreateProcess) JobScheduler我首先開始使用TerminateProcess(),但它不允許我正確關閉可執行文件本身。我的意思是我找不到任何終止事件的方法。
直到我找到一個更好的方式比一個殘酷了TerminateProcess(),我撰寫的用的GenerateConsoleCtrlEvent()在調用程序中的中間解決方案。
在啓動目標作業可執行文件的作業應用程序中,我使用了SetConsoleCtrlHandler()安裝了一個處理程序。 而在處理程序中,我可以終止工作流程並正確通知我的第三方。 這是我現在發現的更好的解決方案。
有沒有更好的方法來編程和正確關閉一個過程? 你這個解決方案完全荒謬嗎? 我不是一個「系統級」的專業開發人員,但...
Z.
發送'WM_CLOSE'消息到該進程? –
你是什麼意思「[TerminateProcess']不允許我正確關閉可執行文件」? 'TerminateProcess'是終止進程最殘酷的方式,它將地毯拉出 - 沒有DLL分離通知,沒有文件緩衝區刷新,現在再見。該進程已打開的任何句柄將代表其關閉(包括其自己的可執行文件)。 –
@Adam:我的意思是TerminateProcess只是「終止」這個過程。期。事先未通知「已終止」進程。 – Zyend