簡體   English   中英

捕獲遠程進程的子進程的標准輸出

[英]Capture stdout for a remote process' child process

目前正在處理一種情況,我需要為外部進程的子進程捕獲 stdout/stderr。 對於這種情況,我需要一個命名管道嗎?

我目前嘗試了以下方法:

SECURITY_ATTRIBUTES saAttr;
HANDLE hStdOutRd = NULL;
HANDLE hStdOutWr = NULL;
HANDLE hDupStdOutWr = NULL;

saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); 
saAttr.bInheritHandle = TRUE; 
saAttr.lpSecurityDescriptor = NULL; 

CreatePipe(&hStdOutRd, &hStdOutWr, &saAttr, 0) ) 
SetHandleInformation(hStdOutRd, HANDLE_FLAG_INHERIT, 0) )

HANDLE hExProc = OpenProcess(PROCESS_DUP_HANDLE, false, EXTERNAL_PROC);
DuplicateHandle(GetCurrentProcess(), 
                hStdOutWr, 
                hExProc,
                &hDupStdOutWr, 
                0,
                TRUE,
                DUPLICATE_SAME_ACCESS);

// Child process for EXTERNAL_PROC executes and should inherit the duplicated handle
// Read from hStdOutRd

從管道讀取時,它要么掛起,要么不返回任何內容。 我假設這是一個匿名管道,僅適用於父子進程而不適用於外部進程。 我不想使用命名管道,是否可以將管道從遠程進程返回到我的進程,然后訪問數據? 如果是這樣,那會是什么樣子?

不,您不需要使用命名管道,匿名管道就可以了。 MSDN 提供了一個從子進程捕獲輸出的完整示例:

創建具有重定向輸入和輸出的子進程

暫無
暫無

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

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