免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ccf

fork的一个例子,好像人家是讲得很详细了,我还是不明白 [复制链接]

论坛徽章:
0
发表于 2005-03-05 22:37 |显示全部楼层

fork的一个例子,好像人家是讲得很详细了,我还是不明白

其实可以理解为fork就是生成了当前进程的一个副本,与原来进程不同的是原来进程中返回的是>;0,副本中返回==0,两个进程各执行一次if(),所以会打印2个了

论坛徽章:
0
发表于 2005-03-06 07:49 |显示全部楼层

fork的一个例子,好像人家是讲得很详细了,我还是不明白

谢谢各位大大,受益匪浅

论坛徽章:
0
发表于 2005-03-06 20:53 |显示全部楼层

fork的一个例子,好像人家是讲得很详细了,我还是不明白

#include <unistd.h>;
#include <sys/types.h>;

main ()
{       int i=5;
        pid_t pid;
        pid=fork();
        for(;i>;0;i--){
        if (pid < 0)
                printf("error in fork!";
        else if (pid == 0)
                printf("i am the child process, my process id is %d and i=%d\n",getpid(),i);
        else
                printf("i am the parent process, my process id is %d and i=%d\n",getpid(),i);
          }
}

i am the child process, my process id is 11879 and i=5
i am the child process, my process id is 11879 and i=4
i am the child process, my process id is 11879 and i=3
i am the child process, my process id is 11879 and i=2
i am the child process, my process id is 11879 and i=1
i am the parent process, my process id is 11878 and i=5
i am the parent process, my process id is 11878 and i=4
i am the parent process, my process id is 11878 and i=3
i am the parent process, my process id is 11878 and i=2
i am the parent process, my process id is 11878 and i=1

我觉得这样改写一下就更好理解了

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2005-03-08 15:30 |显示全部楼层

fork的一个例子,好像人家是讲得很详细了,我还是不明白

原帖由 "sniper" 发表:
哦,偶明白了,在程序段里用了fork();之后程序出了分岔,派生出了两个进程。具体哪个先运行就看该系统的调度算法了。
在这里,我们可以这么认为,在运行到"pid=fork();"时系统派生出一个跟主程序一模一样的子进程。该进程的"pid=fork();"一句中pid得到的就是子进程本身的pid;子进程结束后,父进程的"pid=fork();"中pid得到的就是父进程本身的pid。因此改程序有两行输出。
..
本来也觉得各位讲的挺好的.但你这里说的不太懂,子进程一定先结束?如果系统调度是先执行父进程那它执行完了不就退出了?然后子进程还要执行.

该进程的"pid=fork();"一句中pid得到的就是子进程本身的pid;子进程结束后,父进程的"pid=fork();"中pid得到的就是父进程本身的pid

这是什么意思?怎么还分子进程和父进程的pid = fork()呢?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2005-03-08 15:38 |显示全部楼层

fork的一个例子,好像人家是讲得很详细了,我还是不明白

因为我们知道fork()向父进程返回了派生子进程的pid,是个正整数;而派生子进程的pid变量并没有被改变。这一区别使得我们看到了他们的不同输出。
派生子进程的pid变量并没有被改变是什么意思?对于子进程来讲pid不就是0吗?

论坛徽章:
0
发表于 2005-03-08 15:56 |显示全部楼层

fork的一个例子,好像人家是讲得很详细了,我还是不明白

>;>;派生子进程的pid变量并没有被改变是什么意思?对于子进程来讲pid不就是0吗?

1,派生子进程的进程,即父进程,其pid不变;
2,对子进程来说,fork返回给它0,但它的pid绝对不会是0;之所以fork返回0给它,是因为它随时可以调用getpid()来获取自己的pid;
3,楼上的楼上的你的观点是对的,fork之后夫子进程除非采用了同步手段,否则不能确定谁先运行,也不能确定谁先结束。认为子进程结束后父进程才从fork返回的,这是不对的,fork不是这样的,vfork才这样。

论坛徽章:
0
发表于 2005-03-08 20:37 |显示全部楼层

fork的一个例子,好像人家是讲得很详细了,我还是不明白

原帖由 "bashfulboy" 发表:
我也来一下:
wujiajia 的理解有些错误,
printf("AAAAAAAA";//print 一次;   这里会print 2次
如果你将 printf("AAAAAA" 换成 printf("AAAAAA\n"   那么就是只打印一次了.
主要的区别是因为有了一个 \n  回车..........


佩服,实在太强了!

论坛徽章:
0
发表于 2005-03-08 23:03 |显示全部楼层

fork的一个例子,好像人家是讲得很详细了,我还是不明白

佩服佩服。码这么多字已经是很不容易,何况还说的这么清楚呢?

论坛徽章:
0
发表于 2005-03-09 09:35 |显示全部楼层

fork的一个例子,好像人家是讲得很详细了,我还是不明白

都成FORK()专家了,贴出fork()实现代码就完结了.

论坛徽章:
0
发表于 2005-09-30 17:37 |显示全部楼层

fork的一个例子,好像人家是讲得很详细了,我还是不明白

我的理解是产生的新进程和父进程同样的代码,2个进程分时运行(可以理解为同时运行)所以2个都打印出来。(if 只是区别子和父进程 运行哪个代码)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP