线程与进程
线程定义
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),退出状态,进程即将被销毁。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。