Linux Kernel Notes

Linux Kernel Notes

进程管理

进程

进程不仅仅局限于一段可执行的程序代码,还包含其他资源,如挂起的信号,内核的数据,处理器状态,一个或多个具有内存映射的内存地址空间以及一个或多个执行线程,存放全局变量的数据段等。

进程就是正在执行的程序的代码的实时结果。

线程是指进程中活动的对象,每个线程都有一个独立的程序计数器进程栈还有一组进程寄存器

内核调度的对象是线程,而在传统Unix系统中,一个进程仅仅包含一个线程,对于Linux而言,线程只是一种特殊的进程。

进程在创建时变开始存活,这是调用fork()函数的结果,该函数通过复制一个现有进程来创建新的进程。调用fork()函数的进程被称为 父进程,而新产生的进程则为 子进程folk()系统调用从内核返回两次:一次回到父进程,另一次回到新产生的子进程

[!NOTE]

在现代Linux中,folk()其实是clone调用实现的。

在一般情况下,创建新的进程都是为了立即执行新的、不同的程序,而接着调用exec()来创建新的地址空间,将新的程序载入其中。最后程序再通过exit()退出执行,exit()终结进程并且释放占用的资源,父进程可以通过**wait4()查询子进程是否终结。这使得进程拥有了等待特定进程执行完毕的能力,进程退出执行后被设置为僵死状态,直到它的父进程调用wait()waitpid()**为止。

[!NOTE]

wait()、waitpid()、wait4()这些函数虽然有细微的语意差别,但是所有函数都返回关于终止进程的状态。

进程描述符及任务结构

Linux内核将进程的列表存放在 TaskList中,它是一个双向循环链表。链表的每一项类型都为 task_struct、称为进程描述符的结构,且被定义于 **<linux/sched.h>**文件中。


Linux Kernel Notes
http://blog.claret.space/2024/03/19/LinuxKernel/
作者
ClaretWheel1481
发布于
2024年3月19日
许可协议