首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Poco::Process::launch挂起

Poco::Process::launch挂起
EN

Stack Overflow用户
提问于 2014-08-05 03:25:12
回答 2查看 1.3K关注 0票数 0

使用Poco启动进程会导致程序挂起:

代码语言:javascript
复制
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分支,但是子进程并没有退出,它只是挂在那里。因此,代码片段中的最后一行永远不会执行。

我不知道怎么调试这个。任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

发布于 2014-08-05 05:11:03

我刚刚发现这个问题很可能与Poco无关,而是与分叉过程本身有关。我的程序还派生了一些python代码(pythonrun.PyRun_SimpleString),这个子进程也挂起了。

票数 1
EN

Stack Overflow用户

发布于 2014-08-05 03:34:36

子进程肯定会挂起,因为没有任何东西读取它使用的管道的另一端,即outPipeerrorPipe。子进程可能还应该关闭读取端,因为它只对在上面写入消息和错误消息感兴趣。

我还猜测正确的方法是通过:

代码语言:javascript
复制
Poco::ProcessHandle ph = Poco::Process::launch(cmd, args, 0, outPipe.writeHandle(), errorPipe.writeHandle());

在读取之前,父进程也应该关闭写句柄。

代码语言:javascript
复制
outPipe.close(CLOSE_WRITE);
errorPipe.close(CLOSE_WRITE);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25126059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档