本主题中的示例演示如何使用来自控制台进程的 [color=var(--theme-primary-base)]CreateProcess 函数创建子进程。 它还说明了使用匿名管道重定向子进程的标准输入和输出句柄的方法。 请注意,命名管道还可以用于重定向进程 i/o。 [color=var(--theme-primary-base)]CreatePipe函数使用 [color=var(--theme-primary-base)]安全 _ 属性结构创建两个管道的读写端的可继承句柄。 一个管道的读取端用作子进程的标准输入,另一个管道的写入端是子进程的标准输出。 这些管道句柄在 [color=var(--theme-primary-base)]STARTUPINFO 结构中指定,使其成为子进程继承的标准句柄。 父进程使用这两个管道的相对端来写入子进程的输入,并从子进程的输出中读取。 如 [color=var(--theme-primary-base)]安全 _ 属性 结构中所指定,这些句柄也是可继承的。 但不得继承这些句柄。 因此,在创建子进程之前,父进程使用 [color=var(--theme-primary-base)]SetHandleInformation 函数来确保子进程的标准输入的写入句柄和子进程标准输出的读取句柄不能继承。 有关详细信息,请参阅 [color=var(--theme-primary-base)]管道。
取DOS返回也是采用匿名管道方式通信,但是遇到类似netstat -a 等耗时命令无法返回,通用CMD界面中按下ctrl+C可取消,本实例附加到子进程,可发送ctrl+C命令取消。 |