进程相关概念:
1. 进程的基本概念
进程是一个独立的可调度的任务。
进程是一个程序的一次执行的过程。
2. 进程与程序的区别
1)程序是静态的,它是保存在磁盘上的一些指令的有序集合,没有任何执行的概念;进程是动态的,它是程序执行的过程,包括创建、调度、消亡。
2)进程是一个独立的可调度的任务,是一个抽象实体,当系统在执行某个程序时,系统会分配和释放各种需要的资源。进程不仅包括程序的指令和数据,还包括程序计数器值、CPU寄存器值以及存储数据的堆栈等。
3)进程是一个程序的一次执行的过程。
4)进程是程序执行和资源管理的最小单位。
3. Linux下的进程结构
1)主要的进程标识
进程号(PID)
父进程号(PPID)
2) PID唯一的标识一个进程
3)Linux中的进程包含三个段
a) 数据段,存放全局变量、常数、以及动态数据分配的数据空间(如malloc函数取得空间等。
b) 正文段,存放的是程序中的代码
c)堆栈段,存放函数的返回地址、函数参数以及程序中局部变量。
4. Linux系统中的进程类型
1)交互式进程:这类进程用于操作系统与用户进行交互,由shell控制和运行,需要用户的输入(键盘、鼠标等操作)。
2)批处理进程:这类进程无需与用户进行交互,通常在后台运行。常见的批处理进程有编译器的编译操作、数据库搜索操作等。
3)守护进程:这类进程一直在后台运行,与任何终端无关,通常情况下在系统启动时开始执行,系统关闭时才结束。许多系统进程(服务类进程)都是以守护进程的形式存在。
5. 进程运行状态
TASK_RUNNING 进程正在运行或准备运行
TASK_INTERRUPTIBLE 进程处在阻塞(睡眠)状态,等待某些事件发生。若被唤醒,则转变成TASK_RUNNING状态
TAST_UNINTERRUPTIBLE 与前者类似,不过不会接收信号
__TASK_STOPPED 进程被停止
__TASK_TRACED 进程被debugger等进程监视
EXIT_ZOMBIE 进程被终止,但是其父进程还未使用wait()函数族函数回收
EXIT_DEAD 进程最终退出的状态
1)运行状态(TASK_RUNNING):
该状态下进程正在运行,或已经准备就绪等待调度
2)可中断阻塞状态(TASK_INTERRUPTIBLE):
该状态下进程出于阻塞(睡眠)状态,正在等待某些事件发生或等待分配某些系统资源。处在该状态下可以接收信号并被信号中断。当进程被唤醒(事件发生/获得资源/接收到某些信号/被系统显示唤醒)后,进程转换为TASK_RUNNING状态
3)不可中断阻塞状态(TASK_UNINTERRUPTIBLE):
该状态类似可中断阻塞状态(TASK_INTERRUPTIBLE),只不过该状态下进程不能接收或处理信号。在某些情况下(例如让进程必须等待直至事件发生/获得资源)这种状态是十分有用的。
4)暂停状态(TASK_STOPPED):
进程的执行过程被暂停。当进程收到某些信号(SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU等信号)时,就会进入该状态。当进程收到SIGCONT信号后,会恢复运行,进入TASK_RUNNING状态
5)僵死状态(EXIT_ZOMBIE):
进程的运行已经结束,但该进程的父进程尚未使用wait()函数族对其回收。处在该状态下的进程已经放弃了系统资源和内存空间,没有任何执行代码,也不能被调度,仅仅在进程队列内保留一个位置记载该进程的退出状态,等待父进程收集。
6)消亡状态(EXIT_DEAD):
父进程对该进程调用wait()函数族,该进程彻底退出。
6.进程模式
进程的执行模式分为用户模式与内核模式
用户态
访问资源受限
内核态
所有资源都可以访问处理器指令集,全部内存,IO空间
如何进入内核态?
系统调用: swi 每一个系统调用都有一个编号
异常:中断、swi、prefetch、abort***** 《ARM》
7.Linux下的进程管理
1)启动进程
手动启动:
由用户输入命令直接启动进程
前台运行和后台运行
调度启动:
系统根据用户事先的设定自行启动进程
at在指定时刻执行相关进程
cron周期性执行相关进程
2)一些进程操作命令
ps 查看系统内进程
top 动态监测系统中进程
nice 按用户指定优先级运行进程
renice 改变运行中的进程优先级
kill 杀死进程
bg 将进程放在后台运行
fg 将后台进程放到前台进行