我通过Process类从我的C#app启动一些批处理文件。这个文件启动了java app。我无法识别哪个名为java.exe的进程必须被kill才能停止此应用程序。有没有比杀死他们更优雅的方式,希望我结束正确的一个,不要杀死一些其他重要的Java应用程序?感谢您的帮助,我真的坚持到那里。
干杯, 安德鲁
答案 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的Process
和ProcessStartInfo
类很难完成,否则另一个选择是直接启动java.exe并通过以下方法控制参数和环境变量ProcessStartInfo
的{{1}}和Arguments
属性。
然后你可以使用Jason的方法来存储java.exe进程的id,以便以后杀死它。