我需要PROCESS_INFORMATION
在我的应用程序中使用外部进程,我有进程句柄和进程 ID,但我不知道如何PROCESS_INFORMATION
解决这个问题。
我正在使用在 Windows 上运行的 C++(11)、Visual Studio 2012。任何帮助将不胜感激。
PROCESS_INFORMATION
由 填充CreateProcess()
。那艘船已经航行了;该过程已经开始。
让我们专注于你真正想做的事情。要查明进程是否已终止,首先使用OpenProcess()
获取进程的句柄。您将需要已经拥有的 PID。然后WaitForSingleObject()
会告诉你它是否被终止。传递INFINITE
第二个参数以阻塞,直到进程终止。0
如果您想投票,请通过。最后,CloseHandle()
用来清理。
PROCESS_INFORMMATION
提供4条信息:
HANDLE hProcess
HANDLE hThread
DWORD dwProcessID
DWORD dwThreadID
您说您已经拥有其中两个值 - 进程句柄和进程 ID。这样就只剩下线程句柄和线程 ID。这些属于为该进程创建的第一个线程。您可以使用CreateToolhelp32Snapshot()
、Thread32First()
和Thread32Next()
枚举正在运行的线程,查找属于给定进程 ID 的线程 ID,然后用于OpenThread()
获取给定线程 ID 的线程句柄。棘手的部分是确定哪个线程 ID 是第一个线程。该信息在CreateProcess()
.
您需要的信息可以通过CreateToolhelp32Snapshot 函数获得,因为它返回进程 ID 和父进程 ID。可以在此处找到其使用示例。