\1. 分析进程争用临界资源的现象,学习解决进程互斥的方法。
\2. 了解fork( )系统调用的返回值,掌握用fork()创建进程的方法;
. 3. 熟悉wait、exit等系统调用。
修改程序,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,多次反复运行改进后的程序,观察并记录运行结果。
#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;
}
Wait()返回值:若成功则返回子进程ID,若出错返回-1
说明:若调用者无子进程,则立即出错返回;若有,则在一个子进程终止前,wait使调用者阻塞,直到有一个子进程终止。
进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止,当然 如果在调用wait()时子进程已经结束,则wait()就会立即返回子进程结束状态值参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。
Exit()函数
功能:进程结束正常终止,返回结束状态。返回值:无
说明:status为进程结束状态。
原文:https://www.cnblogs.com/domy/p/14191107.html