gpt4 book ai didi

c - 获取由 CreateProcess() 启动的进程的 PID

转载 作者:可可西里 更新时间:2023-11-01 12:34:41 41 4
gpt4 key购买 nike

首先让我声明我不是来自 C 背景。我是一名 PHP 开发人员。因此,到目前为止,我编写的所有代码都是通过从其他示例中提取点点滴滴并对其进行微调以满足我的要求。因此,如果我问的问题过于基础或明显,请多多包涵。

我正在通过 CreateProcess() 启动 FFmpeg

int startFFmpeg()
{
snprintf(cmd, sizeof(cmd), "D:\\ffpmeg\bin\ffmpeg.exe -i D:\\video.mpg -r 10 D:\\frames");

PROCESS_INFORMATION pi;
STARTUPINFO si={sizeof(si)};
si.cb = sizeof(STARTUPINFO);
int ff = CreateProcess(NULL, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
return ff;
}

我需要做的是获取该进程的 PID,然后稍后检查它是否在一段时间后仍在运行。这基本上就是我要找的:

int main()
{
int ff = startFFmpeg();
if(ff)
{
// great! FFmpeg is generating frames
// then some time later
if(<check if ffmpeg is still running, probably by checking the PID in task manager>) // <-- Need this condition
{
// if running, continue
}
else
{
startFFmpeg();
}
}
return 0;
}

我做了一些研究,发现 PIDPROCESS_INFORMATION 中返回,但我找不到说明如何获取它的示例。

一些元数据

操作系统:Windows 7
语言:C
IDE:开发 C++

最佳答案

PROCESS_INFORMATION 中提取它作为最后一个参数传递给 CreateProcess() 的结构,在您的情况下为 pi.dwProcessId

但是,要检查它是否仍在运行,您可能只想等待进程句柄。

static HANDLE startFFmpeg()
{
snprintf(cmd, sizeof(cmd), "D:\\ffpmeg\bin\ffmpeg.exe -i D:\\video.mpg -r 10 D:\\frames");

PROCESS_INFORMATION pi = {0};
STARTUPINFO si = {0};
si.cb = sizeof(STARTUPINFO);
if (CreateProcess(NULL, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
{
CloseHandle(pi.hThread);
return pi.hProcess;
}
return NULL;
}

在启动 main() 时,您可以执行类似...

int main()
{
HANDLE ff = startFFmpeg();
if(ff != NULL)
{
// wait with periodic checks. this is setup for
// half-second checks. configure as you need
while (WAIT_TIMEOUT == WaitForSingleObject(ff, 500))
{
// your wait code goes here.
}

// close the handle no matter what else.
CloseHandle(ff);
}
return 0;
}

关于c - 获取由 CreateProcess() 启动的进程的 PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15018778/

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