使用Poco启动进程会导致程序挂起:
std::string cmd = "whatever_you_want_to_write_here";
Poco::Pipe outPipe, errorPipe;
Poco::ProcessHandle ph = Poco::Process::launch(cmd, args, 0, &outPipe, &errorPipe);
rc = ph.wait();不管命令'cmd',Poco分支,但是子进程并没有退出,它只是挂在那里。因此,代码片段中的最后一行永远不会执行。
我不知道怎么调试这个。任何帮助都是非常感谢的!
发布于 2014-08-05 05:11:03
我刚刚发现这个问题很可能与Poco无关,而是与分叉过程本身有关。我的程序还派生了一些python代码(pythonrun.PyRun_SimpleString),这个子进程也挂起了。
发布于 2014-08-05 03:34:36
子进程肯定会挂起,因为没有任何东西读取它使用的管道的另一端,即outPipe和errorPipe。子进程可能还应该关闭读取端,因为它只对在上面写入消息和错误消息感兴趣。
我还猜测正确的方法是通过:
Poco::ProcessHandle ph = Poco::Process::launch(cmd, args, 0, outPipe.writeHandle(), errorPipe.writeHandle());在读取之前,父进程也应该关闭写句柄。
outPipe.close(CLOSE_WRITE);
errorPipe.close(CLOSE_WRITE);https://stackoverflow.com/questions/25126059
复制相似问题