[英]C# NET Application not shutting down Java Process
我編寫了一個C#NET應用程序(作為服務運行的控制台應用程序),該應用程序管理Java進程(Minecraft Game Server),而我們的Web Panel軟件則管理我的應用程序。 當Java進程停止時,我的應用程序會自行停止,而當我的應用程序停止時,它將停止Java進程。
我遇到的問題是,經過廣泛的錯誤測試后,我將軟件部署到了所有機器上,但是似乎遺漏了一個錯誤,該錯誤有時無法關閉Java進程。 當Web軟件嘗試啟動我的應用程序,我的應用程序嘗試啟動Java進程時,此錯誤很可怕,但是由於無法綁定IP(由於舊進程保持打開狀態)而失敗,並且最終出現15-30個錯誤Java進程正在運行。
我已經嘗試了以下兩種方法...
static void TerminateProcess()
{
log.LogMessage("Minecraft Process Shutdown.");
SendProcessCmd("stop");
}
和
static void TerminateProcess()
{
log.LogMessage("Minecraft Process Shutdown.");
minecraftProcess.Kill();
}
但是,我似乎丟失了關閉C#應用程序的另一種方式,因為這兩種方式似乎都會使Java進程偶爾運行一次,而我無法在本地進行復制。
好吧,您沒有提出任何問題,我想您想問一下可以關閉進程的其他方式,以便您可以攔截它並確保Java進程終止。 簡而言之:這是不可能的(完全概括)。
只需看一下您自己的代碼:您正在執行與Minecraft完全相同的操作:調用TerminateProcess會使目標進程立即終止,而沒有任何機會進行清理。 如果有人在您身上調用TerminateProcess (例如,從任務管理器中殺死該進程的用戶),您的進程將立即終止。
另外,某些致命異常是無法捕獲的,例如,當您的進程死於堆棧溢出時 ,不會被告知,只是終止了。
我想您需要創建另一個進程,監視您的進程……(或者重新思考整個體系結構,創建和銷毀進程,尤其是使用TerminateProcess時,對我來說似乎有點困難。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.