进程(线程)控制
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.2 Linux进程派生关系
Linux用进程树进行进程管理 0号进程(也称交换进程)完 成进程调度和让进程在主 存与磁盘上进行交换 1号进程(内核态)负责执行 内核的部分初始化工作及 系统配置,并创建若干个 用于高速缓存和虚拟主存 管理的内核线程 1号进程调用execve()运行 可执行程序init,演变成 用户态1号进程,即init进 程,完成系统启动工作 ……
top命令:显示CPU占用率为前几位的进程
动态显示,输出结果连续 消耗较多的系统资源
pstree命令:列出当前的进程,以及它们的树状结构
将当前的执行程序以树状结构显示,弥补ps命令的不足 支持指定特定程序(PID)或使用者(USER)作为显示的起始
2.1 Linux进程管理命令—进程终止
终止一个进程或终止一个正在运行的程序Leabharlann 2.3 Linux守护进程
独立启动(stand_alone)守护进程
常驻内存,一直占用系统资源 外界有要求时响应速度较快 放在/etc/init.d/目录下
超级守护进程
系统启动时由超级守护进程xinet负责管理,当相应请求 到来时通过xinet的转接唤醒被xinet管理的进程 最初只有xinet占有系统资源,其他的内部服务不占有系 统资源,只有数据包到来时才被唤醒 放在/etc/xinit.d/目录下
获取进程属性
getpid():获取目前进程的进程标识 getpgid():获得参数pid指定进程所属的组识别码 getpgrp():获得目前进程所属的组识别号,等价于 getpgid(0) getpriotity():获得进程、进程组和用户的执行优先权
2.2 Linux控制函数—进程退出
正常退出:在main()函数中执行return、调用exit()函 数或_exit()函数 异常退出:调用abort()函数、进程收到信号而终止 区别
2.3 Linux守护进程—守护进程的编写
(1) 创建子进程,退出父进程
脱离控制终端:子进程变成1号进程(init)的子进程
(2) 在子进程中创建新会话
摆脱其他进程的控制(函数setsid)
(3)改变当前目录为根目录
脱离父进程文件系统控制(函数chdir)
(4)重设文件权限掩码
设置为0,增强守护进程的灵活性(函数umask )
kill命令:根据PID向进程发送信号,缺省操作是停止进程 如果进程启动了子进程,只终止父进程,子进程运行中将仍消 耗资源成为“僵尸”进程,可用kill -9强制终止退出 kill -9 pkill命令:终止同一进程组内的所有进程。允许指定要终止的 进程名称,而非PID Killall命令:与pkill应用方法类似,直接杀死运行中的程序 数据库服务器的父进程不能用这些命令杀死(容易产生更多的 文件碎片导致数据库崩溃)
2.2 Linux进程控制函数—创建进程
fork() 产生当前进程的 拷贝
2.2 Linux进程控制函数—修改进程
函数族exec() :启动另外的进程取代当前的进程
#include <unistd.h> int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, const char *envp[]); int execv(const char *path, const char *argv[]); int execve(const char *path, const char *argv[], const char *envp[]; int execvp(const char *file, const char *argv[]);
创建守护进程
该守护进程创建日志文件/tmp/cpu.log,并每隔10秒记录cpu 的利用率
2.2 Linux进程控制函数—进程属性操作
设置进程属性
nice():改变进程执行的优先级 setpgid():将指定进程的组进程设为指定的组识别码 setpgrp():将目前进程的组进程识别码设为目前进程 的进程识别码,等价于setpgid(0,0) setpriority():设置进程、进程组和用户的执行优先权
1.3 Linux线程(2)
Linux线程分为内核线程和用户线程两种线程模型
内核线程更利于并发使用多处理器的资源 用户线程更多考虑上下文切换开销 内核线程没有独立的地址空间,只在内核空间运行 用户线程在用户空间中实现 内核线程的调度由内核负责,内核线程处于阻塞状态时 不影响其他的内核进程 用户线程的调度由线程运行库来组织线程的调度,进程 中的用户线程阻塞时整个进程会切换为等待状态,其他 线程不能运行
1.3 Linux线程(1)
从Linux2.6开始,Linux kernel才有真正的thread支持
Linux2.6线程库叫NPTL(Native POSIX Thread Library),基 于进程实现,但创建线程的效率非常高 核内的轻量级进程形式:拥有独立的进程表项,而所有 操作都在核外pthread库中进行 核外的1:1线程模型:一个核心进程对应一个线程,将线 程调度等同于进程调度,交给核心完成,而其它工作都 在核外线程库中完成
2.1 Linux进程管理命令—进程优先级设置
进程优先级nice值
进程在计划执行时被赋予 默认值为0,范围从−20(最有利的调度优先级)到 19(最不利的调度优先级)
进程优先级设置
nice命令:使用比默认nice值更高或者更低的优先级 运行进程 renice命令:调整已经运行的进程的优先级 root用户可以提高或降低任意进程的nice值,普通用 户只能增加进程优先级的值(降低优先级)
交互进程:Shell启动的进程,可在前台或后台运行 批处理进程:进程序列,不与特定终端关联 守护进程(Daemon):后台服务进程,独立于控制终端, 常在系统引导装入时启动,在系统关闭时终止
1.1 Linux进程及其属性(2)
进程的描述信息
PID:进程的ID号,内核按进程创建顺序逐一分配。init 进程PID为1,其他进程的PID依次增加 PPID:父进程号。现有进程需克隆自身创建一个新进程 (init进程除外),被克隆的进程称为父进程,克隆出的副 本进程称为子进程 PGID:进程组号。主进程(初始的父进程)创建的所有进 程拥有相同的进程组号PGID UID:进程的真实用户号 EUID:进程的有效用户号。用于确定进程在给定时刻对 哪些资源和文件具有访问权限。多数情况下EUID和UID 相同 GID:进程用户组号 FGID:有效进程用户组号
实验五 进程(线程)控制
实验五 进程(线程)控制
预备知识
Linux进程及其属性 Linux进程派生关系 Linux线程
实验指导
Linux进程管理命令 Linux进程控制函数 Linux守护进程
实验目的、内容
1.1 Linux进程及其属性(1)
Linux中对各种资源的分配和管理都以进程为单位 操作系统需要跟踪所有进程的活动,以及它们对系 统资源的使用情况,从而实施对进程和资源的动态 管理 Linux系统的进程类型
(5)关闭文件描述符
关闭文件描述符为0、1和2的三个文件(输入、输出和报错 文件)
实验五 进程(线程)控制
预备知识
Linux进程及其属性 Linux进程派生关系 Linux线程
实验指导
Linux进程管理命令 Linux进程控制函数 Linux守护进程
实验目的、内容
3.1 实验目的
加深对进程概念的理解,明确进程与程序的 区别 掌握Linux进程创建及撤销的方法,进一步认 识并发执行的实质 掌握Linux系统下守护进程的创建方法
实验五 进程(线程)控制
预备知识
Linux进程及其属性 Linux进程派生关系 Linux线程
实验指导
Linux进程管理命令 Linux进程控制函数 Linux守护进程
实验目的、内容
2.1 Linux进程管理命令—进程查看
ps命令:报告进程标识、用户、CPU时间消耗以及其他属性
命令单独使用可以看到前台执行的进程;后台进程可以使用带参数 的ps命令(如ps -ax) 提供进程的一次性查看,结果不连续 结果数据很精确,但数据量庞大
exit是一个函数,有参数,把控制权交给系统 return是函数执行完后的返回,将控制权交给调用函数 exit是正常终止进程,abort是异常终止 exit中参数为0代表进程正常终止,为其他值表示程序执 行过程中有错误发生 exit()在头文件stdlib.h中声明,先执行清除操作,再将控 制权返回给内核 _exit()在头文件unistd.h中声明,执行后立即返回给内核
3.2 实验内容
获取进程信息
编写程序,获取系统当前执行进程的信息,包括进程名称与 ID、PID和PGID等,并以树状结构打印所有系统进程
创建进程
编写程序,父进程创建子进程,父子进程分别循环输出字符 串“I am parent/child.”5次,每输出一次延时1秒,循环输出 将程序改为父子进程同步执行:子进程循环输出字符串5次, 然后父进程再循环输出字符串5次