Domanda

Voglio scrivere un programma, che lancerà un processo figlio. Il processo di bambino può essere la modalità di Windows o il programma in modalità console.

Voglio monitorare lo stato del processo bambino e l'utilizzo delle risorse. per esempio. Voglio sapere il processo figlio è ancora in esecuzione o terminata. Se è terminato, voglio sapere il motivo (è terminata normalmente oa causa di incidente?).

E durante il processo figlio in esecuzione e / o è terminato, voglio sapere il suo utilizzo delle risorse, in particolare il tempo di CPU (tempo di utente, di sistema) e l'utilizzo della memoria (dimensione virtuale e / o RSS). E 'OK se i numeri non sono molto precisi.

Nella terminologia Unix, voglio fork, exec, waitpid e getrusage. E fork + setrusage + exec possono limitare l'utilizzo delle risorse del bambino. Ma io non so come fare questi sulla piattaforma Windows.

Vi prego di indicare il nome API di Windows. Ho potuto studiare il resto me stesso.

Preferisco non usando la libreria diversa l'API di Windows. Preferisco non è genitore che lavora come debugger e allegando al processo figlio. Basta che non preferire, ma comunque accettabile.

È stato utile?

Soluzione

Quando si chiama CreateProcess, restituisce un handle al processo.

WaitForSingleObject su un manico processo bloccherà fino a quando il processo è terminato o timeout è scaduto. Un timeout di zero tornare immediatamente e indicano se il processo è ancora in esecuzione.

BOOL IsProcessRunning(HANDLE process)
{
    return WaitForSingleObject(process, 0) != WAIT_OBJECT_0;
}

void WaitForProcessToExit(HANDLE process)
{
    WaitForSingleObject(process, INFINITE);
}

Per ottenere il codice di uscita di un processo in esecuzione, è possibile utilizzare GetExitCodeProcess. Avrete bisogno di interpretare il significato del codice di errore, tuttavia. 0xC0000005 è tipico per una violazione di accesso, ma non tutti gli arresti risultato in questo codice di errore.

Per l'utilizzo delle risorse, è possibile chiamare GetProcessTimes per ottenere il tempo totale della CPU, GetGuiResources per ottenere GDI gestire informazioni, GetProcessMemoryInfo per ottenere statistiche di memoria, e GetProcessIoCounters per ottenere informazioni IO.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top