exit函数总结

来源:互联网 发布:如何自学软件开发 编辑:程序博客网 时间:2024/06/10 23:45


         今天在看<<unix高级环境编程>>的关于讲进程的这一章,发现这一章给我的信息量很大很大,很多东西都是以前不怎么了解的东西,而且发现如果不自己总结一下,明天有可能又要重新的看,觉得这些东西还是很有趣的。有可能和书上讲的很相似,可能就是抄书的,哈哈哈,不过真的有自己的理解。

          1.关于进程结束的方式

                1.1正常的方式

                      1.1.1 main函数执行return

                      1.1.2 调用exit函数

                      1.1.3 调用_exit 和_Exit函数

                      1.1.4 进程的最后一个线程在其启动例程中返回语句(这个我不是很了解,书上的意思按我的理解就是在启动例程就直接返回了)

                      1.1.5 进程的最后一个线程使用pthread_exit函数

                 1.2 非正常的方式

                      1.2.1 调用abort函数

                      1.2.2 进程接受某种信号

                      1.2.3 最后一个线程对“取消”请求做出相应(不是很了解这个意思)

            书上所说不管是哪种结束方式,最后都会执行内核中的同一个代码,这段代码为相应的进程关闭所有打开描述符,释放它所使用的存储器

    

            2.父进程如何得知子进程已经终止状态

                       对于不管什么样的终止情况,子进程的结束肯定是要告之父进程,而父进程又如何去得知子进程的结束呢?
                       首先要知道的是子进程是如何去通知他们的父进程,是使用什么样的方式呢?我们可以将他们分为2种状态,一种是退出状态,这种来源于使用exit,_exit,_Exit这样函数的返回值。一种是终止状态,这种状态是来源于异常退出,os会产生一个指示其异常终止原因的终止状态。
                        而父进程又如何去得知子进程的终止信息呢?父进程可以使用wait或者waitpid这两个函数来进行对终止子进程的信息。通过这两个程序可以用来获得子进程结束的信息。这些信息可能包含有进程ID,该进程的终止状态,以及该进程使用的CPU的时间总量等。
                        一个子进程的结束,os会对这个终止状态的进程进行回收内存的,以及其他资源的回收等。
                        wait和waitpid函数会使调用他的进程发生什么样的情况呢?
                                   1.1 通常情况下,如果有子进程在运行的话,那么父进行就一直被阻塞中
                                   1.2 如果有一个子进程已终止,那么正在等待的父进程就会取回他的终止状态,然后就返回了
                                   1.3 如果父进程没有子进程的话那就是立即的错误返回

            3.父进程与子进程

                    以前都觉得如果父进程比子进程先一步结束的话那么子进程应该也会消失,但是由于在实验过程中发现并非是这样的,但是也不知道到底发生了。这次在看书过程中发现了这个事情。当父进程比子进程先一步结束的时候,那么子进程就会被init进程所收留,也就是说那些子进程的父进程就是init进程。关于对init进程的讲解有,它是pid=1的进程,不是系统进程,但是它不会在系统运行中结束,它是所有孤儿进程的父进程。
                     僵死进程:这个名词的含义是:如果一个子进程已经终止状态,但是由于父进程没有取得它的信息。僵死进程主要在于父进程没有对终止状态的子进程进行善后出来!!还有就是关于init的子进程是不会出现僵死进程的,因为无论什么时候init的子进程结束了,init进程都会调用wait函数进行取得信息。