我通过Process class从C#app启动了一些批处理文件。此文件启动了Java应用程序。我无法识别哪个进程称为java.exe必须杀死以停止此应用程序。有没有比杀死所有更优雅的方式,希望我结束了正确的,并不杀死其他重要的Java应用程序?感谢任何帮助,我真的坚持在那里。查杀java.exe进程
干杯, 安德鲁
我通过Process class从C#app启动了一些批处理文件。此文件启动了Java应用程序。我无法识别哪个进程称为java.exe必须杀死以停止此应用程序。有没有比杀死所有更优雅的方式,希望我结束了正确的,并不杀死其他重要的Java应用程序?感谢任何帮助,我真的坚持在那里。查杀java.exe进程
干杯, 安德鲁
编辑:我错过了批处理文件的一部分。如果您可以直接从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();
看来他并不知道Java进程正在启动,所以我怀疑他知道代码在哪里,或者源代码不可用。 – 2009-12-04 13:58:52
我假设,由于批处理文件启动了Java应用程序,因此知道批处理文件进程的ID将无济于事。
Process.GetProcessesByName("java")
为您提供了所有java.exe实例的列表。
加上他需要查询C#应用程序和java进程之间的父子关系。你可以发布该代码吗? :P – 2009-12-04 14:00:14
伪代码。在这里填写OS特定呼叫:
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#应用程序的儿童组成的数组。
嗨,那看起来很有趣。你能给我一些提示isChildOf方法吗? – Andrew 2009-12-04 15:11:21
除非该批处理文件做很多事情,很难只用.NET的Process
和ProcessStartInfo
类来实现,另一种选择是直接开始的java.exe和控制通过ProcessStartInfo
的Arguments
和EnvironmentVariables
性能参数和环境变量。
然后,您可以使用Jason的方法来存储java.exe进程的ID,以便稍后杀死它。
应该有一个OS维护的Java.app和C#应用程序之间的父子关系。我假设你在窗户上?为什么你想要杀死这个Java进程? – 2009-12-04 13:57:44
是在窗户上的Iam。 Java进程由用户从我的C#应用程序启动。它为他做了一些计算。如果用户决定停止计算,我必须杀死Java应用程序,因为它处理大量的数据,因此时间昂贵。谢谢。我发现一些维护亲子关系,我会测试它。 – Andrew 2009-12-05 00:41:09