gpt4 book ai didi

windows - 让CreateProcess继承调用进程的控制台

转载 作者:可可西里 更新时间:2023-11-01 13:06:49 29 4
gpt4 key购买 nike

当我在 Windows 中调用 CreateProcess 时,新进程似乎没有继承调用进程的控制台。我制作了一个运行“ruby xtest”的测试程序,xtest 是一个将“hello”写入标准输出的脚本。我从 Emacs 运行了这个测试程序,但没有得到任何输出。我还尝试了以下调用 GetStdHandle 的代码,但同样没有输出。然后我尝试将 dwCreationFlags 中的 CREATE_NEW_CONSOLE 传递给 CreateProcess,这会创建一个带有 Ruby 输出的全新窗口。最后,我做了一个简单的 fork/exec测试程序并使用 Cygwin 的 GCC 编译它。这个程序成功了:Ruby 输出如预期的那样出现在 Emacs 中。我试图破译 http://cygwin.com/cgi-bin/cvsweb.cgi/src/winsup/cygwin/spawn.cc?rev=1.268&content-type=text/x-cvsweb-markup&cvsroot=src 中的 Cygwin 源代码但失败了。那么,如何让新进程继承父进程的控制台,使子进程的输出按预期显示?

STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(si));
memset(&pi, 0, sizeof(pi));
si.dwFlags |= STARTF_USESTDHANDLES;
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
if(!CreateProcess(0, "ruby xtest", 0, 0, 1, 0, 0, 0, &si, &pi)) die("CreateProcess");

最佳答案

我知道,这个帖子很旧,但是,我遇到了同样的问题。

就像 TS 一样,控制台句柄被继承并且在 Cygwin 下工作正常,但在 Windows 控制台上却不行。相反,stdout 上的输出既没有显示,也没有报告任何错误。继承的管道句柄仍然可以正常工作。

我花了一些时间来确定(现在很明显的)问题:使用 CREATE_NO_WINDOW 调用了 CreateProcess()。删除此标志,控制台输出就可以了。 (虽然,根据 TS 的代码,他们从来没有在第一时间设置这个标志。)

希望这可能对像我一样偶然发现此线程的人有所帮助。

关于windows - 让CreateProcess继承调用进程的控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/340356/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com