免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4514 | 回复: 4
打印 上一主题 下一主题

关于UNIX下使用execvp的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-14 11:47 |只看该作者 |倒序浏览
如果使用execvp成功则原来父进程的数据段会被子进程覆盖,但是堆栈会怎么样呢?!
我调用execvp传入的arg list是使用malloc分配的,执行execvp之后这快空间是否应该释放,如果释放的话应该怎么做?!



谢谢先了!!!

论坛徽章:
0
2 [报告]
发表于 2003-07-14 15:23 |只看该作者

关于UNIX下使用execvp的问题

man 2 execve
       execve() does not return on success, and the text, data, bss, and stack   of the calling process are overwritten by that of the  program  loaded. The  program  invoked  inherits the calling process's PID, and any open file descriptors that are not set to close on exec.  Signals pending on the  calling  process are cleared.  Any signals set to be caught by the calling process are reset to their default behaviour.  The SIGCHLD signal (when set to SIG_IGN) may or may not be reset to SIG_DFL.

第一:
不光是数据段,SS也一样。
第二:
用malloc获得的内存在堆中,释放的途径有两种
a) free
b) 该进程退出
所以为了不产生泄漏,当然要free之。但是好像没有什么好办法去free.不知道你为什么要把这些参数保存在堆中。完全没必要。

论坛徽章:
0
3 [报告]
发表于 2003-07-14 15:40 |只看该作者

关于UNIX下使用execvp的问题

用途是在UNIX上模拟CreateProcess,为了得到子进程id,并将子进程的标准输出重定向,所以先fork一个子进程,然后使用execvp执行传入的参数,暂时没有想到其它的办法,所以只好这样了!!!

论坛徽章:
0
4 [报告]
发表于 2003-07-14 16:09 |只看该作者

关于UNIX下使用execvp的问题

这个思路可以吗?
main()
{
pipe=popen();
pid=fork();
if(pid>;0)
{
// 父进程
WritePipe(parametre);
}else if(pid==0){
  // 子进程
  structure* param=ReadPipe();
  execlv(param->;arg0,param->;arg1,0);
}
} // end main

这样不就可以不用malloc了。

论坛徽章:
0
5 [报告]
发表于 2003-07-21 18:13 |只看该作者

关于UNIX下使用execvp的问题

但是多个参数的话就不能这样用了!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP