操作系统实验报告--进程的创建 下载本文

} else {

printf(\父进程id=%d,父进程打印a\\n\ exit(0); } }

随机执行:

程序执行如下:

1. 父进程里的fork调用,复制父进程生成一个副本即为子进程1 2. 得到父进程与子进程1

3. 随机执行这两个进程中的一个,(两个进程都是压在栈里)

4. 假设(那么栈底下的就是父进程)执行的是子进程1,则fork返回值是0,则for循环中断!这是也是子进程不能创建自己的子子进程的一个重点!i=0,往下继续执行当前进程的后面的程序,打印当前子进程1的信息,并且按照要求打印出

5.

6.

7.

8.

参考:百度百科fork函数

b。这个进程执行完毕后自动销毁!

弹出栈底的父进程,执行父进程,在父进程中fork返回值是子进程1的ID,这时候for循环继续,再次调用fork函数,复制当前的父进程,生成一个副本,即子进程2.在把父进程和子进程2随机压入栈中。

假设栈顶是父进程,执行父进程,此时的i=1已经不满足for循环要求了,所以继续往下执行当前进程的程序,当前是父进程,所以fork返回的是子进程的ID,即pid!=0。打印父进程信息。父进程执行完毕,进程销毁!

弹出栈底的子进程2,fork返回值是0,中断for循环!i=1。往下执行当前进程的程序,pid==0,所以打印子进程2,并且按照要求打印b。子进程销毁。 到此所有进程都应该销毁了!