簡體   English   中英

如何知道Windows上的子進程狀態和資源使用情況?

[英]How to know child process status and resource usage on windows?

我想寫一個程序,它將啟動一個子進程。 子進程可以是Windows模式或控制台模式程序。

我想監視子進程狀態和資源使用情況。 例如,我想知道子進程仍在運行或終止。 如果它終止,我想知道原因(正常終止或因崩潰?)。

在子進程運行和/或終止期間,我想知道它的資源使用情況,特別是CPU時間(用戶時間,系統)和內存使用情況(虛擬大小和/或rss)。 如果數字不是很准確,那就沒關系。

在Unix術語中,我想要fork,exec,waitpid和getrusage。 而fork + setrusage + exec可以限制孩子的資源使用。 但我不知道如何在Windows平台上執行這些操作。

請指出Windows API名稱。 我自己可以研究其余的。

不希望使用Windows API以外的庫。 首選它不是父作為調試器工作並附加到子進程。 只是不喜歡,但仍然可以接受。

當您調用CreateProcess時,它將返回進程的句柄。

進程句柄上的WaitForSingleObject將阻塞,直到進程退出或超時已過期。 超時為零將立即返回並指示進程是否仍在運行。

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

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

要獲取正在運行的進程的退出代碼,可以使用GetExitCodeProcess。 但是,您需要解釋錯誤代碼的含義。 0xC0000005是訪問沖突的典型情況,但並非所有崩潰都會導致此錯誤代碼。

對於資源使用,您可以調用GetProcessTimes來獲取總CPU時間,使用GetGuiResources來獲取GDI句柄信息,使用GetProcessMemoryInfo來獲取內存統計信息,使用GetProcessIoCounters來獲取IO信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM