当前位置:首页 > 操作系统实验报告进程的创建
操作系统实验报告进程的创建
运行结果: 5、wait()函数与sleep()函数。 程序代码: #include
} } } 运行结果: 6、编写一段程序,父进程使用fork()创建两个子进程,利用输出函数putchar父进程显示字符”a”,两个子进程分别显示“b”与“c”。 程序代码: #include
putchar('B'); printf(\ } } 运行结果: 四、实验过程与分析 1、在1例子中,调用正确完成时,给父进程返回的就是被创建子进程标识,给子进程自己返回的就是0;创建失败时,返回给父进程的就是-1。 2、在2例子中,vfork()调用后需要注意两点: (1)子进程先运行,父进程挂起。子进程调用exec()或exit()之后。父进程的执行顺序不再有限制。 (2)子进程在调用exec()或exit()之前。父进程被激活,就会造成死锁。 3、在6例子中,上述程序就是父进程先创建一个子进程,若成功,再创建另一个子进程,之后三个进程并发执行。究竟谁先执行,就是随机的。所以执行结果有多重种。 五、实验总结 操作系统实验报告进程的创建
1、一个进程调用exec()函数来运行一个新程序。之后该进程的代码段、数据段与堆栈段就被新程序的所代替。新程序从自己的main()函数开始执行。exec()函数有6种不同的形式,任何一个都可以完成exec()的功能,只就是调用参数不同。 2、在父子进程同步中,当一个进程结束时,产生一个终止状态字,然后核心发一个SIGCHLD信号通知父进程。因为子进程结束就是异步于父进程的,故父进程要结束之前,要同步等待子进程终止。这就是通过调用系统调用wait或waitpid来实现的。 当父进程通过调用wait或waitpid同步等待子进程结束时,可能有以下几种情况: (1)如果子进程还未结束,父进程阻塞等待; (2)如果子进程已经结束,其终止状态字SIGCHLD放在指定位置等待父进程提取,这时,父进程可立即得到终止状态字并返回; (3)如果没有子进程,父进程立即错误并返回。
共分享92篇相关文档