样例:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main(){
printf("开始\n");
int pid=fork();
printf("%d\n",pid);
if(pid){ //父进程执行
int status;
int result=wait(&status); //等待子进程结束
if(result == -1 || status){ //子进程异常结束
printf("出错!\n");
}
else{ //子进程正常退出
printf("结束\n");
}
}
else{ //子进程执行
printf("1/0=%d\n",1/0);
}
return 0;
}
输出
输出了一次开始,一个新建进程的ID4067,子进程中获取的ID0,输出出错
pid_t fork(void)函数:
作用:
创建一个新的进程,将现在运行的进程的处理器状态,地址空间直接拷贝到新进程中,新进程接着fork()函数之后进行,所以样例中只输出了一次开始。
返回值:
返回进程表示ID,可以区分父进程与子进程,父进程返回新建的子进程ID,子进程返回0,可以通过判断返回值使父进程与子进程执行不同的操作,那么我们就可以实现类似c++的try-catch功能。
void exit(int status)函数:
作用:
当进程运行结束或者出错(如越权,除数为0),会被系统终止,当然我们也可以调用exit()函数主动结束进程,可以模拟c++的throw
参数:
int型参数表示结束进程时的状态
*pid_t wait(int status)函数:
作用:
使父进程的状态变为等待态,直到父进程的所有子进程中的一个成功退出并返回结束状态值(父进程不能直接等待子进程的子进程)避免父进程先结束,而导致子进程变为僵尸进程
参数:
int*指针,储存子进程结束状态值,类似catch
返回值:
结束状态的子进程的进程标识ID,等待过程中出现错误(如没有可以等待的子进程),就返回-1
*pid_t waitpid(pid_t pid,int stat_loc,int options )函数:
作用:
可以指定一个进程标识ID来等待一个特定的进
参数:
pid参数大于0时等待进程ID为pid的进程
pid参数为-1时等待所有子进程的任何一个
pid参数为0时等待所有进程组ID与父进程相同的子进程
pid小于-1时等待任何进程ID为pid绝对值的进程
stat_loc与wait相同
options特殊控制选项
返回值:
与wait相同
基础薄弱,如有遗漏及错误,发现后改正