有没有一种方法可以在c#

时间:2019-08-29 15:41:09

标签: c# process

我已经启动了多个过程,并且我想跟踪每个过程,以便如果过程在我不知情的情况下结束,我可以再次开始。

当前,我将进程ID存储在数据库中,并使用进程ID和名称来检查进程是否仍在运行。

Process process=Process.GetProcessById(id);
if(process.ProcessName==processName){
 //kill the process
}

但是,我在网上阅读的内容是,当一个进程死亡时,其ID将免费供其他进程使用。可能会有一个新进程使用我的旧进程ID和名称,这可能使我假设我的旧进程仍在运行。

是否可以添加其他字段以使我的流程唯一?如过程现场?我无法获得有关流程站点用途的更多信息。

2 个答案:

答案 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 创建流程  或类似的东西。

Documentation