Linux下进程控制开发——进程概述

一、进程的基本概念

1.进程的定义

        进程是一个程序的一次执行的过程,同时也是资源分配的最小单元。它和程序是有本质区别的,程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念;而进程是一个动态的概念,它是程序执行的过程,包括动态创建、调度和消亡的整个过程。它是程序执行和资源管理的最小单元。因此,对系统而言,当用户在系统中键入命令执行一个程序的时候,它将启动一个进程。

2.进程控制块

        进程是Linux系统的基本调度和管理资源的单位,通过进程控制块来描述。进程控制块包含了进程的描述信息、控制信息以及资源信息,它是进程的一个静态描述。在Linux中,进程控制块中的每一项都是一个task_struct结构,它是在include/linux/sched.h中定义的。

3.进程的标识

         在Linux中最主要的进程标识有进程号(PID)和它的父进程号(PPID)。进程号唯一标识一个进程。PID和PPID都是非零的正整数。可以通过getpid()获得PID,通过getppid()获得PPID。另外,进程标识还有用户和用户组标识、进程时间、资源利用情况等。

4.进程运行的状态

         进程是程序的执行过程,根据它的生命周期可以划分成3种状态:

(1)执行态:该进程正在运行,即进程正在占用CPU。

(2)就绪态:进程已经具备执行的一切条件,正在等待分别CPU的处理时间片。

(3)等待态:进程不能使用CPU,若等待事件发生(等待的资源分配到)则可以将其唤醒。

二、Linux下的进程结构

        Linux系统是一个多进程的系统,它的进程之间具有并行性、互不干扰等特点。每个进程都是一个独立的运行单位,拥有各自的权利和责任。各个进程都是运行在独立的虚拟地址空间,即使一个进程发生异常,它也不会影响到系统的其他进程。

        进程包含3个段:数据段、代码段和堆栈段

(1)数据段:存放的是全局变量、常数以及动态数据分配的数据空间,根据存放的数据。根据存放的数据,数据段又可分成普通数据段(包括可读可写/只读数据段,存放静态初始化的全局变量或常量)、BSS数据段(存放未初始化的全局变量)以及堆(存放动态分配的数据)。

(2)代码段:存放的是程序代码的数据。

(3)堆栈段:存放的是子程序的返回地址、子程序的参数以及程序的局部变量等。

三、Linux下进程的模式和类型

        在Linux系统中,进程的执行模式划分为用户模式和内核模式。如果当前运行的是用户程序、应用程序或者内核以外的系统程序,那么对应的进程就在用户模式下运行;如果在用户程序执行过程中出现系统调用或者发生中断事件,那么就要运行操作系统(即内核)程序,进程模式就变成内核模式。在内核模式下运行的进程可以执行机器的特权指令,而且此时该进程的运行不受用户的干扰,即使是root用户也不能干扰内核模式下进程的运行。用户进程既可以在用户模式下运行,也可以再内核模式下运行。

四、Linux下的进程管理

 Linux下进程管理包括启动进程和进程调度。

1.启动进程

       Linux下启动进程有两种主要途径:手工启动和调度启动。手工启动是由用户输入命令直接启动进程,而调度启动是指系统根据用户的设置自行启动进程。

(1)手工启动

       手工启动进程又可分为前台启动和后台启动。

  • 前台启动是手工启动一个进程的最常用方式。一般地,当用户键入一个命令如“ls -l”时,就已经启动了一个进程,并且是一个前台进程。

后台启动往往是在该进程非常耗时,且用户也不着急需要结果的时候启动的。比如用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个shell在格式化过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择。

(2)调度启动

       当系统需要进行一些比较费时而且占用资源的维护工作时,用户可以事先进行调度安排,指定任务运行的时间或者场合,系统将会自动完成这些工作。

2.调度进程

       调度进程包括对进程的中断操作、改变优先级、查看进程状态等,在Linux下可以使用相关的系统命令实现其操作:

Linux中进程调度常见命令
选项 参数含义
ps 查看系统中的进程
top 动态显示系统中的进程
nice 按用户指定的优先级运行
renice 改变正在运行进程的优先级
kill 向进程发送信号(包括后台进程)
crontab 用于安装、删除或者列出用于驱动cron后台进程的任务
bg 将挂起的进程放到后台执行

猜你喜欢

转载自blog.csdn.net/q1449516487/article/details/81456725