linux内核学习-7重要函数(关注新浪微博:寂寞侵蚀的岁月(4000多篇技术分享))

来源:互联网 发布:windows集中管理 编辑:程序博客网 时间:2024/04/30 14:04
该程序主要描述了进程(任务)终止和退出的处理事宜。主要包含进程释放、会话(进程组)终止
和程序退出处理函数以及杀死进程、终止进程、挂起进程等系统调用函数。还包括进程信号发送函数
send_sig()和通知父进程子进程终止的函数tell_father()。
释放进程的函数release()主要根据指定的任务数据结构(任务描述符)指针,在任务数组中删除
指定的进程指针、释放相关内存页并立刻让内核重新调度任务的运行。
进程组终止函数kill_session()通过向会话号与当前进程相同的进程发送挂断进程的信号。
更多电子书教程下载请登陆http://down.zzbaike.com/ebook
本站提供的电子书教程均为网上搜集,如果该教程涉及或侵害到您的版权请联系我们。
第5 章 内核代码 linux/kernel/
117
系统调用sys_kill()用于向进程发送任何指定的信号。根据参数pid(进程标识号)的数值的不同,
该系统调用会向不同的进程或进程组发送信号。程序注释中已经列出了各种不同情况的处理方式。
程序退出处理函数do_exit()是在系统调用的中断处理程序中被调用的。它首先会释放当前进程的
代码段和数据段所占的内存页面,然后向子进程发送终止信号SIGCHLD。接着关闭当前进程打开的所有
文件、释放使用的终端设备、协处理器设备,若当前进程是进程组的领头进程,则还需要终止所有相关
进程。随后把当前进程置为僵死状态,设置退出码,并向其父进程发送子进程终止信号。最后让内核重
新调度任务的运行。
系统调用waitpid()用于挂起当前进程,直到pid 指定的子进程退出(终止)或者收到要求终止该
进程的信号,或者是需要调用一个信号句柄(信号处理程序)。如果pid 所指的子进程早已退出(已成所
谓的僵死进程),则本调用将立刻返回。子进程使用的所有资源将释放。该函数的具体操作也要根据其参

数进行不同的处理。


fork()系统调用用于创建子进程。Linux 中所有进程都是进程0(任务0)的子进程。该程序是
sys_fork()(在kernel/system_call.s 中定义)系统调用的辅助处理函数集,给出了sys_fork()系统
调用中使用的两个C 语言函数:find_empty_process()和copy_process()。还包括进程内存区域验证与
内存分配函数verify_area()。
copy_process()是用于创建并复制进程的代码段和数据段以及环境。在进程复制过程中,主要牵涉
到进程数据结构中信息的设置。

0 0