进程API

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函数取得子进程结束状态。

猜你喜欢

转载自blog.csdn.net/error0_dameng/article/details/81603648