[英]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.