进程退出方式

来源:岁月联盟 编辑:exp 时间:2012-11-04

进程退出分为正常退出和异常退出两种:

(1)正常退出
a.在main函数中执行return
b.调用exit函数
c.调用_exit函数
(2)异常退出
a.调用about函数。
b.进程受到某个信号,而该信号使程序终止。
总结:不管是那种退出方式,最终都会执行内核中的同一段代码。这段代码用来关闭进程中所有打开的文件描述符,释放它所占用的内存和其他资源。

退出方式比较:
a.exit和return的区别:exit是一个函数,有参数;而return是函数执行完后的返回。exit把控制权交给系统,而return将控制权交给调用函数。
b.exit和abort的区别:exit是正常终止进程,而about是异常终止。
c.exit(int exit_cod):exit中的参数exit_code为0代表进程正常终止,若为其他值表示程序执行过程中有错误发生,比如溢出,除数为0。
d.exit()和_exit()的区别:exit头文件stdlib.h中声明,而_exit()声明在头文件unistd.h中。两个函数均能正常终止进程,但是_exit()会执行后立即返回给内核,而exit()要先执行一些清除操作,然后将控制权交给内核。
         父子进程终止的先后顺序不同会产生不同的结果。在子进程退出前父进程退出,则系统会让init进程接管子进程。当子进程先于父进程终止,而父进程又没有调用wait函数等待子进程结束,子进程进入僵死状态,并且会一直保持下去除非系统重启。子进程处于僵死状态是,内核只保存该进程的一些必要信息以备父进程所需。此时子进程始终占用着资源,同时也减少了系统可以创建的最大进程数。如果子进程先于父进程终止,且父进程调用了wait或waitpid函数,则父进程会等待子进程结束。