1、进程结束后资源处理的问题
每一个进程结束之后都会涉及到资源清理的问题:资源1:操作系统会回收里的进程中涉及到资源(栈、堆(malloc)、文件IO);资源2:进程建立时,会自动产生一个task_struct(8KB),这个就是你这个当前进程
包含所有信息的一个结构体(来自于父进程),这个结构体相当于(文件描述符),他是进程描述符。存在于进程管理表中,这里的资源操(进程运行也是需要栈)作系统无法给你回收,只能由他的父进程回收。
2、僵尸进程
前情提要:子进程先结束,父进程(知道)不一定立刻给这个子进程”收尸”,父子进程间(回收资源)是异步通信的。子进程已亡,父进程尚未给其”收尸”,此时这个进程就是僵尸进程。子进程此刻只有task_struct(8KB)和进程运行的栈,未被释放。
回收资源:(1)父进程可以调用wait或者waitpid对子进程的资源进行回收。(2)linux设计的时:如果没有函数进行回收子进程资源,父进程在自己结束后会自动释放子进程资源。
3、孤儿进程
前提:父进程先于子进程结束,此时子进程就是一个孤儿进程(尚未结束)。这个子进程就会被init(进程1)收养,相当于子进程有了父亲。
4、wait和waitpid
wait原理:
(1)子进程先结束,会发一个信号SIGCHLD.
(2)父进程调用wait收尸,如果子进程没有结束,就一直在等,会阻塞在这里。
(3)有资源回收函数,信号发给父进程,此时就可以回收(僵尸进程),父进程可以及时回收资源。没有资源回收函数,什么时候回收资源,父进程安排ÿ
c语言基础(十三)
最新推荐文章于 2024-04-27 17:45:49 发布