ver usuario procesos proceso detener corriendo comandos comando aux administracion c windows winapi pid createprocess

detener - ver procesos de un usuario linux



Obtenga el PID del proceso iniciado por CreateProcess() (2)

Es posible que GetProcessId() utilizar la función api win32 GetProcessId() .

#include <windows.h> ... BOOL bSuccess = FALSE; LPTSTR pszCmd = NULL; PROCESS_INFORMATION pi = {0}; STARTUPINFO si = {0}; si.cb = sizeof(si); pszCmd = ... /* assign something useful */ bSuccess = CreateProcess(NULL, pszCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); if (bSuccess) { DWORD dwPid = GetProcessId(pi.hProcess); ... } else ... /* erorr handling */

Para obtener detalles, consulte aquí: http://msdn.microsoft.com/en-us/library/windows/desktop/ms683215%28v=vs.85%29.aspx

Permítanme comenzar declarando que no soy de origen C Soy un desarrollador de PHP. Entonces, todo lo que he codificado hasta ahora es tomando fragmentos de otros ejemplos y ajustándolos para cumplir con mis requisitos. Así que por favor tengan paciencia si les hago preguntas demasiado básicas u obvias.

Estoy comenzando FFmpeg usando CreateProcess() través

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; }

Lo que tengo que hacer es obtener el PID de ese proceso y luego verificarlo más tarde para ver si sigue funcionando después de un tiempo. Esto es básicamente lo que estoy buscando:

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; }

Hice algunas investigaciones y descubrí que PID se devuelve dentro de PROCESS_INFORMATION , pero no pude encontrar un ejemplo que muestre cómo recuperarlo.

Algunos metadatos

Sistema operativo: Windows 7
Idioma: C
IDE: Dev C ++


Tírelo de la estructura PROCESS_INFORMATION que pasa como el último parámetro para CreateProcess() , en su caso pi.dwProcessId

Sin embargo, para comprobar si aún se está ejecutando, es posible que desee simplemente esperar en el identificador del proceso.

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; }

En tu main() lanzamiento main() puedes hacer algo como ...

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; }