Linux下task

    xiaoxiao2021-03-31  70

    进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。

    在Linux 中每一个进程都由task_ struct 数据结构来定义. task_ struct就是我们通常所说的PCB.她是对进程控制的唯一手段也是最有效的手段. 当我们调用fork() 时, 系统会为我们产生一个task_struct结构。然后从父进程,那里继承一些数据, 并把新的进程插入到进程树中, 以待进行进程管理。

    因此了解task_struct的结构对于我们理解任务调度(在linux 中任务和进程是同一概念)的关键。

    在我自己的linux下,该结构体位于如下目录:


    如上图所示,我们有两种进程状态:

    1.state //关于运行时候的状态 2.exit_state //退出状态

    对应的状态就是图上#define定义的,下面我们来看看具体都有些什么含义?

    TASK_RUNNING表示进程要么正在执行,要么正要准备执行。

    TASK_ INTERRUPTIBLE表示进程被阻塞(睡眠),直到某个条件变为真。条件一旦达成,进程的状态就被设置为TASK_RUNNING。

    TASK_ UNINTERRUPTIBLE的意义与TASK_INTERRUPTIBLE类似,除了不能通过接受一个信号来唤醒以外。

    __ TASK _STOPPED表示进程被停止执行。

    __ TASK _TRACED表示进程被debugger等进程监视。

    EXIT_ZOMBIE表示进程的执行被终止,但是其父进程还没有使用wait()等系统调用来获知它的终止信息。

    EXIT_DEAD表示进程的最终状态。

    现在我们来正式看看task_struct的定义(很长,大约有300多行,这里只截图一小部分):

    参考:

    Linux进程描述符——task_struct(初学者的简单学习)

    Linux进程管理之task_struct结构体(上)

    转载请注明原文地址: https://ju.6miu.com/read-665424.html

    最新回复(0)