进程的概念和分类

1进程的概念


linux采用了分时管理的方法,所有的任务都放在一个队列中,操作系统根据每个任务的优先级为每个任务分配合适的时间片,每个时间片很短,用户根本感觉不到是多个任务在运行,从而使所有的任务共同分享系统资源,因此linux可以在一个任务还未执行完时,暂时挂起此任务,又去执行另一个任务,过一段时间以后再回来处理这个任务,直到这个任务完成,才从任务队列中去除。这就是多任务的概念。

上面说的是单CPU多任务操作系统的情形,在这种环境下,虽然系统可以运行多个任务,但是在某一个时间点,CPU只能执行一个进程,而在多CPU多任务的操作系统下,由于有多个CPU,所以在某个时间点上,可以有多个进程同时运行。

进程的的基本定义是:在自身的虚拟地址空间运行的一个独立的程序,从操作系统的角度来看,所有在系统上运行的东西,都可以称为一个进程。

需要注意的是:程序和进程是有区别的,进程虽然有程序产生,但是它并不是程序,程序是一个进程指令的集合,它可以启用一个或多个进程,同时,程序只占用磁盘空间,而不占用系统运行资源,而进程仅仅占用系统内存空间,是动态的、可变的,关闭进程,占用的内存资源随之释放。

例如,用户在linux上打开一个文件、就会产生一个打开文件的进程,关闭文件,进程也随机关闭。如果在系统上启动一个服务,例如启动tomcat服务,就会产生一个对应的java的进程。而如果启动apache服务,就会产生多个httpd进程。

2.进程的分类


按照进程的功能和运行的程序分类,进程可划分为两大类:

  1. 系统进程:可以执行内存资源分配和进程切换等管理工作;而且,该进程的运行不受用户的干预,即使是root用户也不能干预系统进程的运行。
  2. 用户进程:通过执行用户程序、应用程序或内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。

针对用户进程,又可以分为交互进程、批处理进程和守护进程三类。

  • 交互进程:由一个shell终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行在后台。
  • 批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程。
  • 守护进程守护进程是一直运行的一种进程,经常在linux系统启动时启动,在系统关闭时终止。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件例如httpd进程,一直处于运行状态,等待用户的访问。还有经常用的crond进程,这个进程类似与windows的计划任务,可以周期性的执行用户设定的某些任务。

3.进程的属性


Linux中的就绪态和运行态对应的都是TASK_RUNNING标志位,就绪态表示进程正处在队列中,尚未被调度;运行态则表示进程正在 CPU 上运行。

  • TASK_RUNNING(可运行态或就绪态):这种状态的英文描述是正在运行的意思,可是在Linux内核里不一定是指进程正在运行,所以很容易让人混淆。它是指进程处于可执行状态,或许正在执行,或许在就绪队列中等待执行。因此,Linux内核对当前正在执行的进程没有给出明确的状态,不像典型操作系统里给出两个很明确的状态,比如就绪态和运行态。这种状态是运行态和就绪态的集合,所以读者需要额外注意。

  • TASK_INTERRUPTIBLE(可中断睡眠态):进程进入睡眠状态(被阻塞)以等待一旦条件达成或者资源就位,Linux内核就某些条件的达成或者某些资源的就位,可以把进程的状态设置成可运行态(TASK_RUNNING)并加入就绪队列。也有人将这种状态称为浅睡眠状态。

  • TASK_UNINTERRUPTIBLE(不可中断态):这种状态和上面的TASK_INTERRUPTIBLE状态类似,唯一不同的是,进程在睡眠等待时不受干扰,对信号不做任何反应,所以这种状态又称为不可中断态。通常,使用ps命令看到的被标记为D状态的进程就是处于不可中断态的进程,不可以发送SIGKILL信号终止它们,因为它们不响应信号。也有人把这种状态称为深度睡眠状态。

  • TASK_STOPPED(终止态):进程停止运行了。

  • EXIT_ZOMBIE (僵尸态):进程已经消亡,但是task_struct数据结构还没有释放这种状态叫作僵尸状态,每个进程在自己的生命周期中都要经历这种状态。子进程退出时,父进程可以通过wait()或waitpid()来获取子进程消亡的原因。

上述5种状态在某种条件下是可以相互转换的,也就是说,进程可以从一种状态转换到另外一种状太,比如进程在等待某些条件或资源时从可运行态转换到可中断态。对于进程状态的设置,虽然可以通过简单的赋值语句来设置 

(1)进程的几种状态

进程在启动后,不一定马上开始运行,因而进程存在很多种状态。

  1. 可运行状态:处于这种状态的进程,要么正在运行、要么正准备运行。
  2. 可中断的等待状态:这类进程处于阻塞状态,当前某些条件可能没有满足,一旦达到某种条件,就会变为运行态。同时该状态的进程也会由于接收到信号而被提前唤醒进入到运行态。
  3. 不中断的等待状态:与“可中断的等待状态”含义基本类似,唯一不同的是处于这个状态的进程对信号不做响应。
  4. 僵死状态:也就是僵死进程,每个进程在结束后都会处于僵死状态,等待父进程调用进而释放资源,处于该状态的进程已经结束,但是它的父进程还没有释放其系统资源。(这个状态可能持续时间很短,可能发现不了,因为是父进程调用将资源释放掉之后,僵尸状态就消失了,那么这个进程就进入到了结束状态。)
  5. 暂停状态:表明此时的进程暂时停止,来接收某种特殊处理,

(2)进程之间的关系

在linux系统中,进程ID(用PID表示)是区分不同进程的唯一标识,它们的大小是有限制的,最大ID为32768,用UID和GID分别表示启动这个进程的用户和用户组。所有的进程都是PID为1的init进程的后代,内核在系统启动的最后阶段启动init进程,因而,这个进程是linux下所有进程的父进程,用PPID表示父进程。

下面是通过ps命令输出的sendmail进程信息:

[root@localhost ~]# ps -ef|grep  sendmail
UID       PID     PPID  C   STIME  TTY        TIME               CMD
root      3614     1    0   Oct23   ?        00:00:00  sendmail: accepting connections

相对于父进程,就存在子进程,一般每个进程都必须有一个父进程,父进程与子进程之间是管理与被管理的关系,当父进程停止时,子进程也随之消失,但是子进程关闭,父进程不一定终止。

如果父进程在子进程退出之前就退出,那么所有子进程就变成的一个孤儿进程,如果没有相应的处理机制的话,这些孤儿进程就会一直处于僵死状态,资源无法释放,此时解决的办法是在启动的进程内找一个进程作为这些孤儿进程的父进程,或者直接让init进程作为它们的父进程,进而释放孤儿进程占用的资源。

(进程的释放一般都是通过父亲进程来完成的,如果父进程没有了,这个进程就变成孤儿进程了,进而进程就处于僵死状态了) 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
进程间通信(IPC)是指在多个进程之间交换数据和信息的机制。在操作系统中,进程是独立运行的程序实例,而进程间通信则是这些进程之间进行数据和信息交换的方式。以下是进程间通信的基本概念分类: 1. 基本概念: - 信号量:用于控制多个进程对共享资源的访问,防止出现竞争条件。 - 管道:一种半双工的通信方式,可以在父进程和子进程之间传递数据。 - 共享内存:多个进程可以共享同一块内存区域,使得进程间的数据交换更加高效。 - 消息队列:多个进程可以通过一个消息队列来进行异步通信。 - 套接字:用于在网络上进行进程间通信,可以在不同主机的进程之间进行通信。 2. 分类: - 阻塞式和非阻塞式:阻塞式IPC会在进程之间进行同步,并且在等待数据时会阻塞进程,而非阻塞式IPC则会立即返回,不会阻塞进程。 - 同步式和异步式:同步式IPC会在进程之间进行同步,即发送方将数据发送给接收方后会等待接收方的响应,而异步式IPC则不需要等待接收方的响应。 - 共享式和消息式:共享式IPC可以让多个进程共享同一块内存区域,而消息式IPC则是通过消息传递进行通信。 - 客户端-服务器模式:在客户端-服务器模式中,服务器进程会一直运行,等待客户端进程的请求,并且提供服务。 总之,进程间通信是操作系统中一项非常重要的技术,它能够让多个进程之间高效地交换数据和信息,从而提高了操作系统的整体性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值