gpt4 book ai didi

c# - Windows如何获取已经运行的进程的进程组?

转载 作者:可可西里 更新时间:2023-11-01 09:33:29 27 4
gpt4 key购买 nike

我有一个使用 Process.Start(ProcessStartInfo info) 启动新进程的 WPF 应用程序。

如何获取进程的组进程 ID,以便我可以使用 GenerateConsoleCtrlEvent 发送 Ctrl+C 信号? https://msdn.microsoft.com/en-us/library/windows/desktop/ms683155%28v=vs.85%29.aspx

但是,我在创建的新进程中似乎找不到控制台窗口的组进程ID。它有当前 Windows 用户的 session ID 和进程 ID。

编辑:我终于让我的程序运行了,但我仍然没有找到真正问题的真正答案。

我能够通过使用 GenerateConsoleCtrlEvent 向控制台中的所有进程广播来将 ctrl c 发送到进程。

但是,我无法弄清楚如何获取正在运行的进程的进程组。如果您创建一个新进程,您当然可以保存进程组(它应该是调用 createprocess 的进程的 ID,带有用于创建新进程组的创建标志)。但是,如果您不是自己创建一个新组并且只是想知道进程所属的组,我找不到任何与实际获取此 ID 相关的信息。这些信息肯定存储在某个地方并且可以检索!

我可以使用这个函数在 Windows NT 版本中获取父 ID: Fetching parent process Id from child process

但是,这并不能保证同一个进程组。我开始得出结论,Windows 没有从进程 ID 函数获取进程组 ID。

Linux 有一个简单的 getpgrp 函数,它正是我正在寻找的。我不明白为什么windows有一个进程组,如果我不能获取它的值

最佳答案

GenerateConsoleCtrlEvent 的文档指出(强调我的):

The identifier of the process group to receive the signal. A process group is created when the CREATE_NEW_PROCESS_GROUP flag is specified in a call to the CreateProcess function. The process identifier of the new process is also the process group identifier of a new process group.

因此,如果您的进程在一个组中,则 WPF 应用程序的 PID 应该是组 ID。

关于c# - Windows如何获取已经运行的进程的进程组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com