iOS进程

作者: shawnstudy | 来源:发表于2017-12-13 13:49 被阅读0次

在学习的过程之中,为了加深记忆,我觉得还是有必要写一下笔记。

一直对进程有一种模糊的理解,但不知道它具体是怎么工作的。对于未知的总想揭开它的面纱,下面进入正题:

进程的生命周期

一个进程开始于SIDL(空闲)状态,它是被父进程创建fork出来时的状态。进程刚被创建的时候,需要进行内存布局的设置工作以及加载依赖的模块。当完成初始化的时候,进程就开始执行了。会被加入到执行队列,从SIDL状态变成SRUN状态,SRUN有两个不同的状态组成:一个是可运行状态(runnable),一个是正在运行状态(running)。进程被加入运行队列的时候是可运行状态(runnable)状态,这时进程并没有被执行。只有当CPU的寄存器加载了属于某个进程(准确的说,是进程的一个线程)的寄存器值时,这个进程才真正处于正在运行状态(running)。进程的时间片用完了或被更高优先级的进程抢占了,那么该进程就会进入运行队列(runnable)。

进程一般情况下都会在running和runnable之间切换。在一些特殊的情况下,进程会切换到别的状态。比如,进程需要等待一个资源,资源通常都和I/O相关(文件和设备),也可能是互斥体和锁。这时进程就没必要占用CPU资源了,会进入睡眠状态SLEEP。等到资源可用时进程会加入到运行队列,变成SRUN(runnable)状态。

睡眠的进程也可被信号唤醒。CONT信号可以将进程从睡眠中唤醒,切换到SRUN(runnable)状态。TSSTOP或TSTOP信号可以使进程进入睡眠(挂起进程中的所有线程)。

当一个进程从main()函数或调用exit(2)完成执行时,这个进程会从内存中清理出去,同时它的线程也会终止。在进程终止完成之前会短暂的处于SZMOB(僵尸)状态。

相关文章

网友评论

      本文标题:iOS进程

      本文链接:https://www.haomeiwen.com/subject/uwjaixtx.html