2013-01-10 53 views
0

我創建了一個包裝JavaLaunchDelegate並創建了一個新的ZLaunchConfigurationDelegate擴展此。在這個包裝中,我嘗試使用Launch.terminate終止以前的運行Launch,有時它無法終止。如何有效地終止ILaunch對象?

Java代碼:

public static ILaunch getLaunchObject(String launchName) { 
    ILaunch launchObj = null; 
    ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); 
    ILaunch[] launches = launchManager.getLaunches(); 
    for(int i=0 ; i<launches.length ; i++) { 
     ILaunch launch = launches[i]; 
     ILaunchConfiguration config = launch.getLaunchConfiguration(); 
     if(config != null) { 
      String configName = config.getName(); 
      if(configName.equals(serviceName)) { 
       launchObj = launch; 
       break; 
      } 
     } 

    } 
    return launchObj; 
} 

public static void terminateLaunch(String launchName){ 
    ILaunch launch = getLaunchObject(launchName); 
    if(launch != null){ 
     launch.terminate(); 
    } 
} 

terminateLaunch("mylaunch"); 

我想強制殺死進程,如果launch.terminate將無法​​正常工作。

目標

如果我得到了來自Eclipse啓動對象的進程id。我會用os命令殺死進程。

有沒有辦法從啓動對象中獲取進程ID?

謝謝你,

卡納安

回答

0

嘗試殺死所有的流程和調試目標(如果這個啓動是在調試模式下)第一和終止啓動。

private void terminate(ILaunch launch){ 
    try{ 
     IProcess [] processList = launch.getProcesses(); 
     for(IProcess process : processList) { 
      if(! process.isTerminated()) { 
       process.terminate();      
      }    
      launch.removeProcess(process); 
     } 

     IDebugTarget [] debugTargetList = 
      launch.getDebugTargets(); 
     for(IDebugTarget debugTarget : debugTargetList) { 
      launch.removeDebugTarget(debugTarget); 
     } 

     launch.terminate(); 

    }catch(Exception ex) { 
     // Exception 
    } 
} 
相關問題