当前位置:  技术问答>linux和unix

fork问题请教!!

    来源: 互联网  发布时间:2016-10-10

    本文导语:  #include  #include  #include  void main() {     pid_t pid;     char *msg = (char*) malloc( 20 * sizeof(char) );     int k;     printf("Process Creation Studyn");     pid = fork();     if(0 == pid)     {         msg = "Child process is r...

#include 
#include 
#include 
void main()
{
    pid_t pid;
    char *msg = (char*) malloc( 20 * sizeof(char) );
    int k;

    printf("Process Creation Studyn");
    pid = fork();
    if(0 == pid)
    {
        msg = "Child process is running! n";
        k = 3;
    }
    else if(-1 == pid)
    {
        perror("Process creation failedn");
    }
    else
    {
        msg = "Parent process is running! n";
        k = 5; 
    }

    while( k > 0)
    {
        puts(msg);
        sleep(1);
        printf("k = %d, &k = %xn", k, &k);
        k--;
    }

    free(msg);
    exit(0);
}


打印出来的结果是:
Process Creation Study

Parent process is running! 

Child process is running! 

k = 5, &k = bfcf9594
Parent process is running! 

k = 3, &k = bfcf9594
Child process is running! 

k = 4, &k = bfcf9594
Parent process is running! 

k = 2, &k = bfcf9594
Child process is running! 

k = 3, &k = bfcf9594
Parent process is running! 

k = 1, &k = bfcf9594
k = 2, &k = bfcf9594
Parent process is running! 

k = 1, &k = bfcf9594
Segmentation fault


问题是:

    既然 fork创建的子进程是copy其父进程的资源的话。
    然后,父亲跟儿子都有各自独立的资源。(表达的可能不准确)

    那么,为什么,父子进程执行下面的代码时:
    
    while( k > 0)
    {
        puts(msg);
        sleep(1);
        printf("k = %d, &k = %xn", k, &k);
        k--;
    }


    &k = bfcf9594 都是同样的值了?我可能错误的认为父亲进程中的K的地址值应该相同,
    儿子进程中k的地址值是相同的,而父子不相同!

    为什么? 谢谢!
    

|
我想我找到答案了。。。。

http://www.linuxsir.org/bbs/thread222454.html

见这个帖子~~!

|
这个是否跟fork的copy-on-write技术有关!

|
创建进程的时候子进程好像不拷贝父进程的数据区

    
 
 

您可能感兴趣的文章:

  • 请教 linux的fork从什么版本开始支持COW?
  • 请教一个关于fork的问题。
  • 请教,关于fork的用法?
  • linuxC中的fork问题,请教大侠帮忙解答
  • 请教进程fork()相关的,执行效率的问题,看我这段程序.
  • 请教对fork()的理解
  • 请教关于fork以及waitpid的问题
  • 请教有关 fork 和 sprintf 函数的问题
  • 请教:C代码中怎样fork出一个java子进程?
  • 请教fork的一个问题
  • 还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了
  • 一个fork的问题
  • 新手的问题关于fork?
  • fork() 父子进程执行顺序问题
  • fork()函数入门级问题:fork()与进程数
  • fork的问题
  • minGW编译带fork函数的问题?
  • 一个简单的fork问题(那个高手来帮忙呀)
  • 关于fork创建进程的一个问题
  • fork与socket问题
  • 关于fork()的一个问题!?
  • 问个关于fork的小问题
  • fork问题
  • fork()复制进程的问题2
  • fork()问题
  • 一个简单的fork()问题,求解···在线等
  • fork 带来的问题!
  • fork()复制进程的问题。
  • linux下fork子进程后的问题
  • 用fork()往文件里写数据问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 奇怪:程序一fork子进程时就停住了,似乎根本不能fork子进程啊?
  • unix中的fork2与fork有设么区别?
  • 程序在fork前申请了内存若干,在fork后子进程是否需要释放父进程之前申请的内存
  • 如何理解fork函数返回2次啊?
  • 急于明白Fork的用法.请提供中文解释.谢谢.
  • 关于fork的不解
  • 弱弱的问:fork和exec的区别是什么?
  • 关于fork的讨论
  • 关于fork的疑问?
  • fork之后的输出
  • exit和fork是什么关系?他们是怎么配合使用的?
  • fork函数,在线等待,马上结贴。谢谢!!!!!!!!!!!!
  • c++ 和 fork
  • "fork(2)" 中这个2表示什么意思
  • fork函数的源代码在哪呢
  • 关于fork函数
  • fork函数的理解。。
  • linux的fork()函数
  • 创建一个子进程,什么时候该用clone()而不是fork()?
  • fork() 父子进程执行顺序问题 iis7站长之家


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3