我已经启动了多个过程,并且我想跟踪每个过程,以便如果过程在我不知情的情况下结束,我可以再次开始。
当前,我将进程ID存储在数据库中,并使用进程ID和名称来检查进程是否仍在运行。
Process process=Process.GetProcessById(id);
if(process.ProcessName==processName){
//kill the process
}
但是,我在网上阅读的内容是,当一个进程死亡时,其ID将免费供其他进程使用。可能会有一个新进程使用我的旧进程ID和名称,这可能使我假设我的旧进程仍在运行。
是否可以添加其他字段以使我的流程唯一?如过程现场?我无法获得有关流程站点用途的更多信息。
答案 0 :(得分:2)
除了Process.StartTime属性的ID外,您还可以存储它。这样一来,在重新使用PID的情况下,应该可以保护您,因为新过程的开始时间与存储的过程不同。
var process = Process.GetProcessById(id);
if (process.ProcessName == processName && process.StartTime == startTime)
{
//kill the process
}
我怀疑以下情况不适用于您,因为您要保留进程信息,但是如果您的应用程序一直在监视这些进程,那么您可以考虑使用Process.Exited事件在进程退出时接收通知,而不是检查每个进程如此频繁,例如
process.EnableRaisingEvents = true;
process.Exited += (sender, args) => { /* Do something */ };
答案 1 :(得分:0)
运行这段代码,然后查看
的可用属性runningProcesses
...
private static void KillProcess(string processName)
{
Process[] runningProcesses = Process.GetProcesses();
foreach (Process process in runningProcesses)
{
if (process.ProcessName == processName)
{
process.Kill();
}
}
}
您可以使用唯一的 BasePriority 创建流程 或类似的东西。