linux进程和线程编程.ppt
《linux进程和线程编程.ppt》由会员分享,可在线阅读,更多相关《linux进程和线程编程.ppt(59页珍藏版)》请在三一办公上搜索。
1、Linux进程和线程编程,1、Linux中的进程相关概念2、Linux中的进程的创建3、Linux中的进程的管理和守护进程,6.1 进程的概述,时间和空间是计算机的两个概念,操作系统将者两个概念实现为文件和进程。进程是一个可以独立的可有OS调度的活动。进程是一个抽象实体,当它执行的时候需要OS分配资源。进程是一个正在执行的程序。进程是一个程序的一次执行。进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元,6.1 进程的概述,进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己
2、的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。原因原因原因原因 操作系统引入
3、进程的概念的原因:从理论角度看,是对正在运行的程序过程的抽象;从实现角度看,是一种数据结构,目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。,6.1.1进程的描述,进程的种类交互进程:由一个Shell启动的进程,交互进程既可以在前台运行,也可以在后台运行。批处理进程:这种进程和终端没有联系,是一个进程序列。监控进程:也称守护进程,Linux系统启动是启动的进程,并在后台运行。进程不但包括程序指令和数据,还包括程序计数器和CPU的所有寄存器及其存储临时数据的进程堆栈。Linux是一个多进程OS,其他进程必须等到当前正在执行的进程交出CPU的控制权后才能被内核
4、调度执行。当正在运行的进程等待其他系统资源时,linux内核获得CPU的控制权,并将CPU分配给其他正在等待的进程,内核中的调度算法决定将CPU分配给那个进程。,内存是计算机的敏感资源,熟练掌握对内存的操作是一个程序员的必备素质。数据的内部存储方式:大小端法在c中,不同的数据类型占用的空间是不同的,例如char类型占用1个字节,而int占用4个字节,6.1.1进程的描述-进程内存管理-数据内部存储,时间和空间是计算机的两个基本的概念,操作系统将这两个概念实现未进程和文件,。进程ID是一个进程的基本属性,其作用类似与人的身份证号,根据进程ID用户可以精确的定位一个进程,一个标识符对应于一个进程,
5、多个进程标识符可以对应于一个程序。进程标识符的类型是pit_t,他是一个无符号整数。,6.1.1进程的描述-进程标识符进程ID,使用PS查看当前进程ps-u 用户名 第一列是进程id最后一列是对应的程序名称,6.1.1进程的描述-进程标识符进程ID,Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。交互进程由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行(人机交互)。批处理进程这种进程和终端没有联系,是一个进程序列(多个进程)。监控进程(也称守护进程)Linux系统启动时启动的进程,并在后台运行。,6.1.1进程的描述-Linux 进程分类,运行状态
6、:此时进程或者正在运行或者准备运行等待状态:此时进程在等待一个事件的发生或者某种系统资源停止状态:此时进程已经被终止死亡状态:这是一个停止的进程,但是在进程向量数组中占有一个task_struct结构R(TASK_RUNNING),可执行状态 S(TASK_INTERRUPTIBLE),可中断的睡眠状态。D(TASK_UNINTERRUPTIBLE),不可中断的睡眠状态。s进程的领导者+前台进程,6.2.1 Linux 进程运行状态,每一个进程有6个重要的ID,分别是进程ID、父进程ID、有效用户ID、有小组ID、实际用户ID和实际组ID。这六个ID保存在内核中的数据结构中,有些时候用户程序需
7、要用到这些ID。例如在/proc文件系统下每个进程有一个目录,里面存放进程的相关信息,当进程要读取这些文件时,应该先得到当前进程的ID才能确定进入那一个进程相关的子目录,由于这些ID存储在内核之中,因此linux提供一组专门的接口函数访问这些ID值。Linux环境下使用getpid和getppid函数获得进程和父进程的ID,其函数原型如下:#include Pid_t getpid(void)pid_t getppid(void)函数成功返回进程的id,失败返回-1,,6.2.1 Linux 进程标识符,Linux环境下使用getuid和geteuid函数获得进程用户ID,其函数原型如下:#i
8、nclude uid_t getuid(void)uid_t geteuid(void)函数成功返回进程的用户id,失败返回-1.Linux环境下使用getgid和getegid函数获得进程用户组ID,其函数原型如下:#include gid_t getgid(void)gid_t getegid(void)函数成功返回进程的用户id,失败返回-1,Pid_t类型参看/usr/include/bits/types.h 实际就是int类型,6.2.1 Linux 进程标识符,每,6.2.1 Linux 进程标识符,启动进程和调度进程1 手动启动:用户直接输入shell命令后回车直接启动进程前台启
9、动:用户输入一个shell命令后按回车就启动给一个前台进程后台启动:在shell命令后加入一个“&”符号再按回车键就可以启动一个后台作业。,6.2.2 Linux 进程标识符启动,进程的前后台切换1 bg命令(background)格式bg作业号功能:将前台作业切换到后台运行,若没有指定的作业则将当前作业切换到后台例如使用vi编辑文件f1然后用ctrl+Z组合挂起vi再切换到后台,6.2.2 Linux 进程进程前后台切换,3Fg挂起程序作用:fg命令使一个被挂起的进程在前台执行。格式:fg job-specjob-spec:后台任务号码。说明:fg命令和bg命令是相对应的。如果想查看后台程序
10、运行情况,可以使用fg命令把它调回前台查看。bg命令可以使多个进程放到后台中执行。,6.2.2 Linux 进程进程命令,作用:ps命令主要查看系统中进程的状态。格式:ps 选项主要选项如下。-A:显示系统中所有进程的信息。-e:显示所有进程的信息。-f:显示进程的所有信息。-l:以长格式显示进程信息。-r:只显示正在运行的进程。-u:显示面向用户的格式(包括用户名、CPU及内存使用情况等信息)。-x:显示所有非控制终端上的进程信息。-p:显示由进程ID指定的进程的信息。-t:显示指定终端上的进程的信息。,6.2.2 Linux 进程进程命令-ps,说明:要对进程进行监测和控制,首先要了解当前
11、进程的情况,也就是需要查看当前进程。ps命令就是最基本、也是非常强大的进程查看命令。根据显示的信息可以确定哪个进程正在运行、哪个进程被挂起、进程已运行了多久、进程正在使用的资源、进程的相对优先级,以及进程的标志号(PID)。所有这些信息对用户都很有用,对于系统管理员来说更为重要。使用ps aux命令可以获得终端上所有用户的有关进程的所有信息,下面结合图4-8讲解进程的基本信息,6.2.2 Linux 进程进程命令-ps,USER表示启动进程用户。PID表示进程标志号。%CPU表示运行该进程占用CPU的时间与该进程总的运行时间的比例。%MEM表示该进程占用内存和总内存的比例。VSZ表示占用的虚拟
12、内存大小,以KB为单位。RSS为进程占用的物理内存值,以KB为单位。TTY表示该进程建立时所对应的终端,?表示该进程不占用终端。STAT表示进程的运行状态,包括以下几种代码:D,不可中断的睡眠;R,就绪(在可运行队列中);S,睡眠;T,被跟踪或停止;Z,终止(僵死)的进程,Z不存在,但暂时无法消除;W,没有足够的内存分页可分配;高优先序的进程;N,低优先序的进程;L,有内存分页分配并锁在内存体内(实时系统或I/O)。START为进程开始时间。TIME为执行的时间。COMMAND是对应的命令名。,6.2.2 Linux 进程进程命令-ps,top命令显示进程top命令用来显示系统当前的进程状况。
13、格式:top 选项主要选项如下。d:指定更新的间隔,以秒计算。q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。c:显示进程完整的路径与名称。S:累积模式,会将已完成或消失的子进程的CPU时间累积起来。s:安全模式。i:不显示任何闲置(Idle)或无用(Zombie)的进程。n:显示更新的次数,完成后将会退出top。,6.2.2 Linux 进程进程命令-top,nice命令改变权限优先级作用:nice命令可以改变程序执行的优先权等级。格式:nice-n-help-version命令主要选项如下。-n或-或-adjustment=:设置欲执行的命令的优先权等级。
14、等级的范围从-2019,其中-20为最高,19为最低。-help:在线帮助。说明:应用程序优先权值的范围从-2019,数字越小,优先权就越高。一般情况下,普通应用程序的优先权值(CPU使用权值)都是0,如果让常用程序拥有较高的优先权等级,自然启动和运行速度都会快些。需要注意的是普通用户只能在019之间调整应用程序的优先权值,只有超级用户有权调整更高的优先权值(从-2019)。例如:nice n 1 ls 1.txt,6.2.2 Linux 进程进程命令-nice,renice命令修改优先级作用:renice命令允许用户修改一个正在运行的进程的优先权。格式:renice priority-p p
15、ids-g pgrps-u users 主要选项如下。priority:优先等级-p pids:改变该程序的优先权等级,此参数为预设值。-g pgrps:使用程序群组名称,修改所有隶属于该程序群组的程序的优先权。-u user:指定用户名称,修改所有隶属于该用户的程序的优先权。说明:renice命令可重新调整正在执行的程序的优先权等级。默认是以程序识别码指定程序,调整其优先权,也可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。等级范围从-2019,只有超级用户可以改变其他用户程序的优先权和设置负数等级。普通用户只能对自己所有的进程使用renice命令。
16、应用实例如下:将进程PID为987及32的进程与进程拥有者为daemon及root的优先级别号加1:#renice+1 987 u daemon root p 32,6.2.2 Linux 进程进程命令-Renice,sleep命令暂停进程作用:sleep命令的功能是使进程暂停执行一段时间。格式:sleep number 选项主要选项如下。number:时间长度,后面可接s、m、h或d。s:以秒为单位。m:以分钟为单位。h:以小时为单位。d:以天为单位。说明:如果没有指定时间,以秒为单位。此命令大多用于shell程序设计中,使两条命令执行之间停顿指定的时间。应用实例如下。下面的命令使进程先暂停
17、60秒,然后查看哪个用户登录到系统中:#sleep 60;who,6.2.2 Linux 进程进程命令-sleep,kill命令杀掉进程作用:kill命令终止一个进程。格式:kill-s signal|-p-apidkill-l signal 主要选项如下。-s:指定发送的信号。-p:模拟发送信号。-l:指定信号的名称列表。pid:要终止的进程的ID号。signal:表示信号。,6.2.2 Linux 进程进程命令-kill,说明:kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。kill命
18、令的工作原理是,向Linux系统的内核发送一个系统操作信号和某个程序的进程标志号,然后系统内核就可以对进程标志号指定的进程进行操作。当需要中断一个前台进程的时候,通常使用Ctrl+C组合键;但是对于一个后台进程,就不是一个组合键所能解决的了,这时就必须使用kill命令。应用实例如下。命令执行过程如果出错,用户可用kill来结束任务。对于在后台运行的进程,可以使用kill命令终止:$kill-s 9 1827,6.2.2 Linux 进程进程命令-kill,1at命令:定时运行命令作用:at命令在指定时刻执行指定的命令序列。#at 2:05 tomorrowat/home/mj/airplane
19、/home/mj/air-safeat Ctrl+D2crontab命令作用:crontab命令用于安装、删除或者列出用于驱动cron后台进程的任务表。然后,该配置由cron守护进程在设定的时间执行。格式:crontab-u user 文件,6.2.2 Linux 进程进程命令-at,fork()创建一个新进程Wake()唤醒一个进程Schedule()进程调度函数Exit()退出进程,6.3.1 Linux 进程进程函数,6.3.2 Linux 进程状态,睡眠进程可以被程序再次的唤醒,而僵死进程不会被任何程序唤醒,只能通过命令kill掉 深度睡眠和浅度睡眠进程得到它需要的资源被唤醒,通过sc
20、hedule()进入执行态,深度睡眠的进程不能被信号或者定时中断唤醒,只有它申请的资源又有效是才能被唤醒。Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状态标志位为TASK_RUNNING。一旦一个运行中的进程时间片用完,Linux 内核的调度器会剥夺这个进程对CPU的控制权,并且从运行队列中选择一个合适的进程投入运行。当然,一个进程也可以主动释放CPU的控制权。函数schedule()是一个调度函数,它可以被一个进程主动调用,从而调度其它进程占用CPU。一旦这个主动放弃CPU的进程被重新调度占用 CPU,那么它将从上次停止执行的位置开始执行,也就
21、是说它将从调用schedule()的下一行代码处开始执行。有时候,进程需要等待直到某个特定的事件发生,例如设备初始化完成、I/O 操作完成或定时器到时等。在这种情况下,进程则必须从运行队列移出,加入到一个等待队列中,这个时候进程就进入了睡眠状态。,6.3.2 Linux 进程状态,Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状态标志位为TASK_RUNNING。一旦一个运行中的进程时间片用完,Linux 内核的调度器会剥夺这个进程对CPU的控制权,并且从运行队列中选择一个合适的进程投入运行。当然,一个进程也可以主动释放CPU的控制权。函数sche
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 进程 线程 编程
链接地址:https://www.31ppt.com/p-5438165.html