特定程序程序关闭时检测C#
问题描述:
我有两个不同的.jar程序运行在同一台机器上。我希望能够检测到其中一个已关闭或不再运行。特定程序程序关闭时检测C#
,我有是,运行此代码时,此问题:
var allProc = Process.GetProcesses();
foreach (var p in allProc)
comboBox1.Items.Add(p.ProcessName);
comboBox1.Sorted = true;
,仅显示了Java的单一实例上运行,不仅如此它不显示任何过程的名称。
我想监视的程序使用了大量的RAM,所以我想了解如何监视RAM使用情况并在低于某个级别时执行我所需要的操作,但对于我来说,这听起来像是一种冒险的方式因素可能会影响它。
任何想法?
答
您可以使用System.Diagnostics.Process
获取您要查找的父进程的进程ID。
从那里,你就可以使用WMI通过(System.Management
)命名空间来寻找孩子的过程:
Process[] javaProcesses = Process.GetProcessesByName("somejavaapp.exe");
foreach (Process proc in javaProcesses)
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher(
"SELECT * " +
"FROM Win32_Process " +
"WHERE ParentProcessId=" + proc.Id);
ManagementObjectCollection collection = searcher.Get();
// Choose what to do with the child processes.
foreach (var childProcess in collection)
{
var childProcessId = (UInt32)childProcess["ProcessId"];
}
}
答
我前一阵子有同样的问题,对我来说最好的解决办法是运行java程序作为孩子。
例
server = new Process();
server.StartInfo.FileName = "java";
server.StartInfo.Arguments = "-Xmx4000M -jar forge.jar nogui";
server.Start();
然后简单地
status = server.HasExited;
答
有一个命令行工具随附JDK称为jps。 jps -v
显示您传递给java的所有参数。它提供了以下的输出:
lvmid [ [ classname | JARfilename | "Unknown"] [ arg* ] [ jvmarg* ] ]
您还可以从C#JPS,然后读取输出。