【问题标题】:How To Get PPID如何获得 PPID
【发布时间】:2012-12-24 10:57:08
【问题描述】:

我正在处理一个 MS Windows C# Winform 项目,但我无法获得 PPID(父进程 ID)。 我找到了许多解决方案,但似乎没有一个适用于上述操作系统和语言。

如何获得 PPID?

【问题讨论】:

    标签: c# process


    【解决方案1】:

    如果你可以使用 System.Management,那就很简单了:

        private static int GetParentProcess(int Id)
        {
            int parentPid = 0;
            using (ManagementObject mo = new ManagementObject("win32_process.handle='" + Id.ToString() + "'"))
            {
                mo.Get();
                parentPid = Convert.ToInt32(mo["ParentProcessId"]);
            }
            return parentPid;
        }
    

    否则您可能不得不通过 CreateToolhelp32Snapshot like this 求助于 P/Invoke 调用

    【讨论】:

    • 这有相当大的开销。只有很少调用才足够好。
    【解决方案2】:

    .NET 不提供内置方式。 Process.GetProcesses() 本身使用NtQuerySystemInformation(SystemProcessInformation,) 来查询大多数进程属性,其返回的条目有一个代码不使用的 PPID 字段。

    所以,要走的路是使用外部技术:

    其他注意事项:

    • 请记住,您获得信息的任何进程都可能随时结束(关键系统进程除外,但您可能对它们不太感兴趣)

    • 在 Windows 中重复使用 PID 而无需重置 PPID。要过滤掉可能的“假父母”,请查看StartTime。真正的父母会比孩子更早开始,假的会晚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 2023-04-03
      • 2018-02-07
      • 1970-01-01
      • 2015-11-15
      • 2013-01-20
      相关资源
      最近更新 更多