免费注册 查看新帖 |

Chinaunix

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

[函数] clone 折腾了很久,还是不明白为何这一句会导致程序死掉! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-22 18:11 |只看该作者 |倒序浏览
#include <sched.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int fn()
{
    sleep(10);
    return 0;
}

int fn2()
{
    sleep(10);
    return 0;
}

int main()
{
    void *child_stack_1 = malloc(1634;
    //void *child_stack_2 = malloc(1634;   //就是这么一句!如果多出来,那么程序就会出现段错误!少了这一句就没事!即使这一句放在 clone 后面也死掉!
    clone(fn, &child_stack_1, CLONE_VM|CLONE_SIGHAND, NULL);
    sleep(10);
    return 0;
}

注:编译、运行环境为 rhel5 2.6.18 gcc 4.1.1

折腾了几个小时不得其解,于是上来请教大家了。

已经有1年多没有玩过Linux C 编程了,今天突然想学学多进程,结果就这样了:(

论坛徽章:
0
2 [报告]
发表于 2009-02-22 18:45 |只看该作者
clone(fn, &child_stack_1, CLONE_VM|CLONE_SIGHAND, NULL);


不太明白为啥这里要取地址。

论坛徽章:
0
3 [报告]
发表于 2009-02-23 03:09 |只看该作者
int clone(int (*fn)(void *), void *child_stack, int flags, void *arg);

查man手册知应该去掉&。

去掉后无Segmentation fault,程序正常。

论坛徽章:
0
4 [报告]
发表于 2009-02-23 09:17 |只看该作者
低级错误。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP