杀死进程java.exe

时间:2009-12-04 13:49:19

标签: c#

我通过Process类从我的C#app启动一些批处理文件。这个文件启动了java app。我无法识别哪个名为java.exe的进程必须被kill才能停止此应用程序。有没有比杀死他们更优雅的方式,希望我结束正确的一个,不要杀死一些其他重要的Java应用程序?感谢您的帮助,我真的坚持到那里。

干杯, 安德鲁

4 个答案:

答案 0 :(得分:2)

编辑:我错过了批处理文件部分。只有在您可以直接从C#...

启动流程时,此答案才有用

启动流程时,您可以存储流程ID,以便稍后恢复流程并将其删除。

Process p = new Process();
//set all the process start Info...
p.Start();

someVariableICanGetToLater = p.Id

//Later when you need to kill the process...
Process pToKill = Process.GetProcessById(someVariableICanGetToLater);
pToKill.Kill();

答案 1 :(得分:0)

我认为,由于批处理文件启动了Java应用程序,因此知道批处理文件进程的ID将无济于事。

Process.GetProcessesByName("java")为您提供了所有java.exe实例的列表。

答案 2 :(得分:0)

伪代码。在此填写特定于操作系统的电话:

int cs_pid=getProcessByName("CSharpAppName");
int javaPid[]= getProcessByName("JavaAppName");

bool javaToCSharpRelationship[]=new bool[javaPid.size];

int loopCounter=0;

forEach int in javaPid
begin
      if(isChildOf(cs_pid,java_pid))
      begin
         // OS call or Wrapper to determine relationship between c# pid
         // and Java app PID
         javaToCSharpRelationShip[loopCounter]=true;
         //can call kill here if you like
      end
      else 
         javaToCSharpRelationShip[loopCounter]=false;
     loopCounter++;
end

在此代码的末尾,您应该有一个PID数组,它们是C#app的子代。

答案 3 :(得分:0)

除非批处理文件做很多事情,仅使用.NET的ProcessProcessStartInfo类很难完成,否则另一个选择是直接启动java.exe并通过以下方法控制参数和环境变量ProcessStartInfo的{​​{1}}和Arguments属性。

然后你可以使用Jason的方法来存储java.exe进程的id,以便以后杀死它。