关于linix进程

来源:百度知道 编辑:UC知道 时间:2024/05/12 07:01:53
我想问的是 关于 linux下的关于进程创建的问题
来看下 代码
#include <stdio.h>
main ()
{ int p1;
int p2;
while((p1=fork())==-1) ; //创建子进程1

if (p1==0) //子进程返回p1 输出b
putchar('b');

else //父进程返回
{
while((p2=fork())==-1) ; //创建子进程2

if (p2==0)
putchar ('c'); //子进程p2返回 输出c

else
putchar('a'); //父进程返回 输出a

}
}

原以为 结果是 b 或者是 c 或者是 a
但是呢 却不是
第一次运行时 abc
第二次是 bac
第三次是 cba
结果 很不一样

这个问题是我在书上抄来的 反复的看书 还是不懂
我不懂在什么地方呢 就是
在这里
while((p1=fork())==-1) ; //创建子进程1
假如 p1==0 的话呢
操作系统先把 子进程1 和 父进程 并发执行的 是吧~~~~

在这就出问题了
哪为 可以告诉我 这时 子进程1的代码 和 父进程 代码不?(不知道这样问 对不对 )

////////////

另一个问题
在linux下呢
父进程 创建 子进程的时候 子进程会续成父进程的
问题就出在这了

子进程续成

fork之后不exec的话父子进程是共享同一个进程空间的,但对于子进程来说是只读的。 只有在需要的时候才创建新的或者给子进程单独拷贝一个(从父进程那里),这个叫做写时拷贝,大概是这么叫的吧哈~~

通常fork后子进程先执行,但也不一定,会受到其它进程竞争,执行的顺序就不一样了

具体记不大清楚了~~``呵呵~``