poco中的进程创建给予了很方便的接口:
std::string cmd("test.exe");
std::vector<std::string> args;
Poco::ProcessHandle ph = Process::launch(cmd, args);
只要给出文件名和命令行参数(一个vector<string>,内容可为空),即可创建进程运行.
这个接口有个特点:
static ProcessHandle launch(
const std::string & command, //命令行命令,即文件名
const Args & args, //命令的参数
const std::string & initialDirectory, //在该目录下创建进程
Pipe * inPipe, //该进程标准输入流
Pipe * outPipe, //该进程标准输出流
Pipe * errPipe, //该进程标准错误输出流
const Env & env
);
这是该接口完整的形式,其它重载最后都会把其它参数用默认值填上.
对于最后三个参数,该接口允许把新创建的子进程的三个标准流重定向到另一个流中,这个流可以是C++的任意输入输出流,即可以重定向到父进程创建的流中,通过一些库,甚至可以把网络也做为一个流,这是一个很有意思的功能,子进程可以很方便的与父进程进行通信,
但是这个重定向却有一个不能让人接受的地方:它肯定会重定向到父进程中...
当没有指定重定向时,如果父进程本身有控制台,则自动重定向到该控制台,即使父进程没有控制台,他也会利用GetConsoleWindow函数获取父进程控制台的句柄,即使看不到控