线程与进程

线程定义

1. 线程是进程中的一个实体,是被系统独立调度和分派的基本单位。
2. 线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源。
3. 但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
4. 线程也有就绪、阻塞和运行三种基本状态。

引用

Linux进程状态解析

    R (TASK_RUNNING):可执行状态。
        1.正在CPU上执行的进程 
        2.可执行但是尚未被调度执行的进程
        
    S (TASK_INTERRUPTIBLE):可中断的睡眠状态
        处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。
        这些进程的task_struct结构被放入对应事件的等待队列中。
        当这些事件发生时(由外部中断触发、或由其他进程触发),对应的等待队列中的一个或多个进程将被唤醒
        
    D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态
        存在的意义就在于,内核的某些处理流程是不能被打断的。
        如果响应异步信号,程序的执行流程中就会被插入一段用于处理异步信号的流程
    T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态
        向进程发送一个SIGSTOP信号,它就会因响应该信号而进入TASK_STOPPED状态。 
              
        当进程正在被跟踪时,它处于TASK_TRACED这个特殊的状态。
        “正在被跟踪”指的是进程暂停下来,等待跟踪它的进程对它进行操作。
        比如在gdb中对被跟踪的进程下一个断点,进程在断点处停下来的时候就处于TASK_TRACED状态。
        而在其他时候,被跟踪的进程还是处于前面提到的那些状态。
        
    Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程
        进程在退出的过程中,处于TASK_DEAD状态。
        在这个退出过程中,进程占有的所有资源将被回收,除了task_struct结构(以及少数资源)以外。
        于是进程就只剩下task_struct这么个空壳,故称为僵尸。
        之所以保留task_struct,是因为task_struct里面保存了进程的退出码、以及一些统计信息。
        而其父进程很可能会关心这些信息。
    X (TASK_DEAD - EXIT_DEAD),退出状态,进程即将被销毁。

shiyang6017
158 声望59 粉丝

引用和评论

0 条评论