Loading

操作系统实验二

1. 实验目的及要求

\1. 分析进程争用临界资源的现象,学习解决进程互斥的方法。

\2. 了解fork( )系统调用的返回值,掌握用fork()创建进程的方法;

. 3. 熟悉wait、exit等系统调用。

2. 实验内容

修改程序,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,多次反复运行改进后的程序,观察并记录运行结果。

3. 实验源码

#include <stdlib.h>

#include <sys/types.h>

#include <sys/wait.h>

#include <stdio.h>

#include <unistd.h>

 

int main()

{

   int pid, status, exitstatus;

   if(fork() == 0) {

​      printf("This is the child process which pid is %d\n", getpid());

​      exit(1);

   } else {

​      pid = wait(&status);

​      exitstatus = WEXITSTATUS(status);

​      printf("child’s pid is %d and exit status is %d\n", pid, exitstatus);

   }

   return 0;  

}

4. 实验结果

结果分析

Wait()返回值:若成功则返回子进程ID,若出错返回-1
说明:若调用者无子进程,则立即出错返回;若有,则在一个子进程终止前,wait使调用者阻塞,直到有一个子进程终止。
进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止,当然 如果在调用wait()时子进程已经结束,则wait()就会立即返回子进程结束状态值参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。

Exit()函数
功能:进程结束正常终止,返回结束状态。返回值:无
说明:status为进程结束状态。

posted @ 2020-12-25 23:07  桥木  阅读(467)  评论(0)    收藏  举报