wait():
pid_t waitpid(int * status)
wait函数用于等待子进程结束或中断
表头文件:#include<sys/types.h> #include<sys/wait.h>
定义函数:pid_t wait(int *status);
wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束为止。如果在调用wait()时。子进程已经结束,则wait()会立即返回子进程的结束状态值。子进程的结束状态值会由参数status返回,而子进程的进程识别码会由参数status返回。如果不在意结束状态值,则参数status可以设成NULL。
返回值:如果执行成功则返回子进程识别码(PID),如果有错误则返回-1,失败原因存在errno中。
waitpid():
waitpid(pid_t pid,int *status,int options);
waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束;
表头文件:#include<sys/types> #include<sys/wait.h>
wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束为止。如果在调用wait()时。子进程已经结束,则wait()会立即返回子进程的结束状态值。子进程的结束状态值会由参数status返回,而子进程的进程识别码会由参数status返回。如果不在意结束状态值,则参数status可以设成NULL。
返回值:如果执行成功则返回子进程识别码(PID),如果有错误则返回-1,失败原因存在errno中。
options可以为0或OR组合,一般常用的为WIFSIGNALED(status):如果子进程是因为信号而结束则此宏值为真;
WTERMSIG(status);取得子进程因信号而终止的信号代码,一般会用WIFSIGNALED 来判断后才使用此宏
进程退出 exit() _exit()
正常退出:return() exit() _exit()
异常退出:调用about函数,进程收到某个信号,而该信号使程序终止
不管是哪种退出方式,系统最终都会执行内核中的同一代码,这段代码用来关闭进程所用已打开的文件描述符,释放它所占用的内存和其他资源;
各退出方式的不同点:exit()是一个函数,有参数,exit执行完后把控制权交给系统;return是函数执行完后的返回,return执行完后把控制权交给调用函数;而exit函数是正常终止进程,about是异常终止;
exit()和_exit():两个函数都是用来终止进程的,当程序执行到exit或_exit时,系统会无条件的终止剩下所有的操作,清楚PCB在内的各种数据结构,并终止本进程的运行
exit():表头文件#include<stdlib.h>
定义函数:void exit(int status)
函数说明:用来正常终结目前进程的执行,并把参数status返回给父进程,而进程所有的缓冲区数据自动写回并关闭未关闭的文件
_exit():表头文件:#include<unistd.h>
定义函数:void _exit(int status)
函数说明:_exit()用来立刻结束目前进程的执行,并把参数status返回给父进程,并关闭未关闭的文件。此函数调用后不会反悔,并且会传递SIGCHLD信号给父进程,父进程可以由wait函数取得子进程结束状态。