进程状态与进程关系

一、进程的六种状态 
 Linux 系统下进程通常存在 6 种不同的状态,分为:就绪态、运行态、僵尸态、可中断睡眠状态(浅度睡眠)、不可中断睡眠状态(深度睡眠)以及暂停态。
  •   就绪态:进程满足被CPU调度的所有条件但此时并没有被调度执行,只要得到CPU的使用权就能够被执行的状态。
  •   运行态:进程正在被CPU调度运行的状态。
  •   僵尸态:进程已经结束,但其父进程还未给它“收尸”的状态。
  •   可中断睡眠态:浅度睡眠,可以被唤醒。
  •   不可中断睡眠态:深度睡眠,无法被信号唤醒,只能等待特定的条件才能结束睡眠。
  •   暂停态:进程暂停运行的状态。
一个新创建的进程会处于就绪态,只要得到CPU就能被执行。它们的关系如图所示。

 

 二、进程关系

  进程间存在着多种不同的关系,主要包括:无关系(相互独立)、父子进程关系、进程组以及会话
  进程组:每个进程除了有一个进程 ID、父进程 ID 之外,还有一个进程组 ID,用于标识该进程属于哪一个进程
组,进程组是一个或多个进程的集合,这些进程并不是孤立的,它们彼此之间或者存在父子、兄弟关系,或
者在功能上有联系。
  进程组的实质时是方便对进程进行管理。每个进程必定有且只能属于一个进程组,每个进程组有个组长进程,组长进程的ID就等于进程组ID,在组长进程的ID前面加一个负号即是操作进程组。组长进程不能再创建新的进程组,进程组的存在与否与组长进程的运行状态无关。默认情况下,新创建的进程会继承父进程的进程组 ID。
  一个进程只能为它自己或它的子进程设置进程组 ID,在它的子进程调用 exec 函数后,它就不能更改该子进程的进程组 ID 了。
  会话:会话是一个或多个进程组的集合。一个会话可包含一个或多个进程组,但只能有一个前台进程组,其它的是后台进程组;每个会话都有一个会话首领(leader),即创建会话的进程。一个会话可以有控制终端、也可没有控制终端。

  会话的首领进程连接一个终端之后,该终端就成为会话的控制终端,与控制终端建立连接的会话首领进程被称为控制进程

三、守护进程
  守护进程(Daemon)也称为精灵进程,是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些事情的发生
  特点:1.长期运行。一般在系统启动时开始运行,除非强行终止,否则直到系统关机都会保持运行。与守护进程相比,普通进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但守护进程不受用户登录注销的影响,它们将会一直运行着、直到系统关机。
  2.与控制终端脱离。普通进程都是和运行该进程的终端相绑定的;但守护进程能突破这种限制,它脱离终端并且在后台运行,脱离终端的目的是为了避免进程在运行的过程中的信息在终端显示并且进程也不会被任何终端所产生的信息所打断。
  守护进程 Daemon,通常简称为 d,一般进程名后面带有 d 就表示它是一个守护进程。守护进程与终端无任何关联,用户的登录与注销与守护进程无关、不受其影响,守护进程自成进程组、自成会话,即pid=gid=sid。
   3.编写守护进程
   步骤
  守护进程一般以单例模式运行。
  4.单例模式运行
  程序只能被执行一次,只要该程序没有结束,就无法再次运行,我们把这种情况称为单例模式运行。
  如何保证进程在单例模式运行-----文件锁。通过系统调用flock()、fcntl()或库函数 lockf()均可实现对文件进行上锁。
  
posted @ 2023-02-02 20:18  是东东东啊  阅读(174)  评论(0编辑  收藏  举报