关于进程创建二

         接着上面的实验部分,在实验一里面打印了8次“-”,且不太明白为什么,8成和我猜测的缓冲区和引用计数,信号处理没有关系,还是来实验一把,

同样把执行他们时的pid和ppid打印出来

 

实验4

在实验1的基础上增加id的输出信息

接下来编译运行一下,这里偷懒写了下makefile,内容是最基本的,就不贴这里了

输出的结果没有回车换行,看起来比较乱,这里手动排版一下:

-pid=2290,ppid=1903

-pid=2290,ppid=1903

-pid=2290,ppid=1903

-pid=2292,ppid=2290

-pid=2291,ppid=2290

-pid=2291,ppid=1

-pid=2291,ppid=2290

-pid=2293,ppid=1

通过输出,可以发现主进程( 这里的进程id为2290)打印了3次,而且第一个新生进程(pid=2291),也打印了3次,然后他们分别派生的进程(pid==2292,2293)打印了1次

总计为8次,

 

且执行的结果很乱,比如第一次ppid为1的时候,2291号进程的原父进程(2290)应该是被销毁了,但第二次打印显示,这时的父进程的id还是2290

这里就有必要怀疑是输出被缓存了,不应该同一个进程的ppid读出出现了2次不相同,且输出顺序有悖逻辑顺序

但为什么主进程和第一次派生的进程执行了3次,按照for循环控制,是不应该出现的呢?

 

那就输出的同时把i的值也给输出来,为了一步到位,把i的地址也输出出来。

 

实验5

 

 编译后运行的输出结果为:

然后再来手动排版一下输出:

-pid=2771,ppid=1903,i=0,&i=-1996736788

-pid=2771,ppid=1903,i=1,&i=-1996736788

-pid=2771,ppid=1903,i=0,&i=-1996736788

-pid=2773,ppid=2771,i=1,&i=-1996736788

-pid=2772,ppid=1,i=0,&i=-1996736788

-pid=2772,ppid=1,i=1,&i=-1996736788

-pid=2772,ppid=1,i=0,&i=-1996736788

-pid=2774,ppid=2772,i=1,&i=-1996736788

从输出的结果来看,同一进程中,i值出现0-》1-》0的现象,有点奇怪,仍然搞不明白,且i的地址为啥是一样的呢?????且为负值,这里求大神指点一二

蛋在这个时候已经不复存在

但有个奇怪的现象,就是貌似线程执行的顺序有一定的规律,难道是线程同步的原因吗?上面结果的,本次的结果,执行顺序是一样的,ok,还是用实验验证下

我的猜测。

 

实验6

这次不改代码,至少多次执行上面的程序,看看输出是否是这样的规律

直接把结果贴出来

这里我已经不要节操了,掉了一地

然而不幸运的是,我的猜测是错误的,进程调度的顺序依然是无序的,这在运行几次的结果中可以看出,这种执行顺序的巧合只是概率问题

且很重要的一点是:0-》1-》0的规律却被保留了下来,且最后一组的输出没有输出完全,

还是把结果排版一下:

-pid=2920,ppid=1903,i=0,&i=1791291036

-pid=2920,ppid=1903,i=1,&i=1791291036

-pid=2921,ppid=2920,i=0,&i=1791291036

-pid=2921,ppid=2920,i=1,&i=1791291036

-pid=2920,ppid=1903,i=0,&i=1791291036

-pid=2922,ppid=2920,i=1,&i=1791291036

-pid=2921,ppid=2920,i=0,&i=1791291036

-pid=2923,ppid=1,i=1,&i=1791291036

到现在为止,我们可以说这8次输出,各个进程分别输出了3次3次1次1次,且输出时出现了截断现象。

 

接下来,可以大胆的猜测下,如果题目中的控制语句是<3,又会是个怎么个情况,且在有回车符的情况下,他们的i的地址是不是一样的呢?

 

难道是书本上写错了?

还是因为这些都是虚拟地址空间,实际上映射到物理内存之后,他们i的地址是不一样?

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值