日期:2014-05-16 浏览次数:20778 次
本文将讲述进程是如何消亡的。一个进程既有父进程又有子进程,因此进程消亡时,既要通知父进程,也要安排好子进程。
当前进程消亡时主要做了三件大事:释放当前进程占用的资源;为当前进程的子进程重新寻找“养父”;通知当前进程的父进程,释放当前进程剩下的资源。
当前进程释放掉大多数进程资源后,只保留内核栈、structtask_struct数据结构;剩下的资源由父进程负责释放。
linux调用sys_exit()、sys_wait4()实现进程的消亡,代码可以在kernel/exit.c中找到。
当前进程使用sys_exit()->do_exit()释放进程占用的资源,处理过程如下:
1、调用in_interrupt()检查中断服务程序是否调用了do_exit()(只有进程才能主动调用sys_exit(),中断服务程序在任何时候都不能调用do_exit());
2、进程0不能消亡,因此检查当前进程的pid是否为0