Linux 在进程中启动另一个程序执行,并捕捉程序的运行结果的方法是什么?

要求使用C,C++编程实现。... 要求使用C,C++ 编程实现。 展开
 我来答
sparkaround
2012-09-29 · TA获得超过3508个赞
知道大有可为答主
回答量:1522
采纳率:0%
帮助的人:946万
展开全部
用fork启动子进程(另外一个程序)。
主进程处理SIG_CHLD信号,用waitpid回收。
追问
这种处理方法要用到 listen 和 socket 而且 waitpid 并不返回子线程在控制台上的输出结果。 有没有能处理 execle 起来的程序返回结果的?是不是要用到重定向? 除了nohup 就没有其他解决方法了吗?
追答
不,这同listen和socket没一点关系。这个方法本身也同重定向也没关系!
nohup那是挂后台!也没关系! 这是最常见的打开子进程的方法。只是nohup和socket编程用到这个方法。

fork之后,子进程内execl:
pid = fork();
if(pid == 0) { /* 子进程 */
execl....
}else{
/* 父进程 */
...

}

同学,waitpid返回的是状态,不是标准输入输出!标准输入和输出需要你自己处理!默认父子进程共享stdin和stdout.

你想要什么结果?

如果只想要程序执行的结果, 用popen.

或者用pipe, 在父进程控制pipe的读端,子进程控制pipe的写端,如果不能改动要execl的代码,在子进程把STDOUT_FILENO(2)重定向(调用dup2)到pipe的写端。 当然,如果要访问STDIN_FILENO, 同样处理。
百度网友d80c8daaa
2012-09-29 · 超过25用户采纳过TA的回答
知道答主
回答量:142
采纳率:0%
帮助的人:53.2万
展开全部
使用system函数调用另外一个程序,可以返回结果。系统会自动fork一个子进程,然后exec执行另外的程序,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
andywhitestar
2012-09-29
知道答主
回答量:57
采纳率:100%
帮助的人:12万
展开全部
用nohup命令启动让程序后台执行!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
18...3@qq.com
2012-09-29 · 贡献了超过126个回答
知道答主
回答量:126
采纳率:0%
帮助的人:24.9万
展开全部
trace
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
56504584
2012-09-29
知道答主
回答量:22
采纳率:0%
帮助的人:8.5万
展开全部
你百度 csdn 注册一个 会员
这个是中国 程序员 喜欢的网站 啥的
然后搜索 你想要的程序 你就可以下载 可能需要一点的 分数 可是 你要是注册了就行 反正免费的
然后不会的 到上面问 那上面的 版主 几十年的技术
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式