Linux 应用基础教程--CH09_进程管理
本章内容要点,进程概述 进程管理 作业控制 守护进程 Xinetd和TCPWappers 安排周期性任务,2018年11月7日,1,Creative Commons License(BY-NC-SA),本章学习目标,理解进程相关概念 掌握如何运行后台进程及注销后继续执行 掌握进程管理命令的使用 掌握作业控制的命令及快捷键的使用 理解并管理守护进程 掌握用Xinetd和TCPWappers配置访问控制的方法 掌握周期性任务的设置方法,2018年11月7日,2,Creative Commons License(BY-NC-SA),进程相关概念,2018年11月7日,3,Creative Commons License(BY-NC-SA),程序、进程和作业,程序( program) 程序是机器指令的集合, 文件形式存储 进程( process ) 进程是一个程序在其自身的虚拟地址空间中的一次 执行活动 作业/任务( job/task ) 用户通过操作系统用户接口(Shell或X环境)提交给计算机进行加工处理的程序。如用户发出一个打印命令,就产生一个打印作业/任务。,2018年11月7日,Creative Commons License(BY-NC-SA),4,进程和程序概念的比较,程序只是一个静态的指令集合;而进程是一个程序的动态执行过程,它具有生命期,是动态的产生和消亡的。 进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源、不能被系统调度、也不能作为独立运行的单位,因此,它不占用系统的运行资源。 程序和进程无一一对应的关系。一方面一个程序可以由多个进程所共用,即一个程序在运行过程中可以产生多个进程;另一方面,一个进程在生命期内可以顺序的执行若干个程序。,2018年11月7日,Creative Commons License(BY-NC-SA),5,进程,进程是一个动态实体。 进程是处理器通过操作系统调度的基本单位。 每个进程的执行都独立于系统中的其它进程。 进程之间可以通过称为进程间通信(IPC)的机制进行交互。 当进程之间共享数据时,操作系统使用了同步技术来保证共享的合法性。,2018年11月7日,Creative Commons License(BY-NC-SA),6,Linux是多用户多任务系统,当多个用户同时在一个系统上工作时,Linux 要能够同时满足用户们的要求,而且还要使用户感觉不到系统在同时为多个用户服务,就好像每一个用户都单独拥有整个系统一样。 每个用户均可同时运行多个程序。为了区分每一个运行的程序,Linux 给每个进程都做了标识,称为进程号(process ID),每个进程的进程号是唯一的。 Linux 给每个进程都打上了运行者的标志,用户可以控制自己的进程:给自己的进程分配不同的优先级,也可以随时终止自己的进程。 进程从执行它的用户处继承UID、GID,从而决定对文件系统的存取和访问。,2018年11月7日,Creative Commons License(BY-NC-SA),7,Linux的多任务实现 分时技术,Linux 不可能在一个 CPU 上同时处理多个任务(作业)请求,而是采用 “分时” 技术来处理这些任务请求。 分时技术 所有的任务请求被排除一个队列,系统按顺序每次从这个队列中抽取一个任务来执行,这个任务执行很短的时间(几毫秒)后,系统就将它排到任务队列的末尾,然后读入队列中的下一个任务,以同样的方式执行。这样经过一段时间后,任务队列中的所有任务都被执行一次,然后又开始下一轮循环。,2018年11月7日,Creative Commons License(BY-NC-SA),8,Linux中的进程识别,使用PID区分不同的进程 系统启动后的第一个进程是init,它的PID是1。 init是唯一一个由系统内核直接运行的进程。 除了init之外,每个进程都有父进程(PPID标识) 每个进程还有四个与用户和组相关的识别号 实际用户识别号 (real user ID,RUID) 实际组识别号 (real group ID,RGID) 有效用户识别号 (effect user ID,EUID) 有效组识别号 (effect group ID,EGID),2018年11月7日,Creative Commons License(BY-NC-SA),9,用户、进程与权限,RUID和RGID的作用 识别正在运行此进程的用户和组。 一个进程的RUID和RGID就是运行此进程的UID和GID。 EUID和EGID的作用 确定一个进程对其访问的文件的权限。 除了产生进程的程序被设置SUID和SGID权限位之外,一般EUID、EGID和RUID、RGID相同。 若程序被设置了SUID或SGID权限位,则此进程相应的EUID和EGID,将和运行此进程的文件的所属用户的UID或所属组的GID相同。,2018年11月7日,Creative Commons License(BY-NC-SA),10,进程类型,交互进程 由一个Shell启动的进程。 交互进程既可以在前台运行,也可以在后台运行。 批处理进程 不与特定的终端相关联,提交到等待队列种顺序执 行的进程。 守护进程(Daemon) 在Linux在启动时初始化,需要时运行于后台的进 程。,2018年11月7日,Creative Commons License(BY-NC-SA),11,进程的启动方式,手工方式:使用操作系统提供的用户接口 前台 后台 (&) 调度方式:按照预先指定的时间执行 at batch cron,2018年11月7日,Creative Commons License(BY-NC-SA),12,前台与后台,前台进程 指一个程序控制着标准输入/输出,在程序运行时,shell 被暂时挂起,直到该程序运行结束后,才退回到 shell。在这个过程中,用户不能再执行其它程序。 后台进程 用户不必等待程序运行结束就可以执行其它程序。 运行后台进程的方法是在命令行最后加上 “&” 例如:$ sleep 10000 &,2018年11月7日,Creative Commons License(BY-NC-SA),13,在一个终端里只能同时存在一个前台任务,但可以有多个后台任务。,INIT与 Shell命令执行过程,2018年11月7日,Creative Commons License(BY-NC-SA),14,进程管理,2018年11月7日,15,Creative Commons License(BY-NC-SA),查看系统中的进程,使用ps命令查看进程状态信息 显示哪些进程正在执行和执行的状态 进程是否结束、进程有没有僵死 哪些进程占用了过多的系统资源等 ps( Process Status )命令格式 ps 选项 不带任何选项的ps命令 显示当前用户所在终端中的所有进程 输出项包括:识别号(PID)、终端(TTY)、运行时间(TIME)、产生该进程所运行的命令(CMD),2018年11月7日,Creative Commons License(BY-NC-SA),16,ps命令的常用选项,2018年11月7日,Creative Commons License(BY-NC-SA),17,ps命令使用举例,$ ps -e $ ps -ef $ ps -eH $ ps -elw $ ps au $ ps aux $ ps axf $ ps auxw,2018年11月7日,Creative Commons License(BY-NC-SA),18,ps 常见的输出标记,2018年11月7日,Creative Commons License(BY-NC-SA),19,ps 的输出依赖于用户所给的选项,ps命令的进程状态列,2018年11月7日,Creative Commons License(BY-NC-SA),20,“STAT“ 或 “S“ 列的输出,ps命令使用举例(2),指定输出列 $ ps o user,pid,ppid,pcpu,pmem,nice,cmd $ ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm $ ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm $ ps -eo “%p %y %x %n %c“ AIX风格 对指定列排序 $ ps -ef -sort user,-time $ ps aux -sort -pcpu $ ps aux -sort -pmem $ ps o user,pid,ppid,pcpu,pmem,nice,cmd -sort nice,2018年11月7日,Creative Commons License(BY-NC-SA),21,搜索进程,使用ps和|grep $ ps aux | grep httpd 查找符合条件的进程PID $ pgrep httpd $ pidof httpd $ ps -C httpd -o pid= $ pgrep -U apache httpd $ pgrep -G student -l,2018年11月7日,Creative Commons License(BY-NC-SA),22,注销后继续运行进程,通常当用户注销后,所有属于该用户的进程将全部被终止。 如果希望程序在退出系统后仍然能够继续运行,可以使用 nohup 命令启动该进程。 例如: $ nohup /bin/mirror_yumrepo_with_rsync.sh -centos -arch i386 -exclude-iso & 若程序有结果输出,输出结果将会被保存到当前目录下的一个文件名为 nohup.out 的文件中, 若用户在当前目录没有写的权限,则结果将会被保存到用户主目录下的 nohup.out 文件中。,2018年11月7日,Creative Commons License(BY-NC-SA),23,nohup 命令 选项 参数 输出文件 &,进程调度的优先权,进程的优先权决定对CPU的使用 进程在运行时可以享有不同等的优先权 进程的优先权受进程的nice值的影响 这个值的范围是 -20到19,默认是 0 值越小说明对CPU的使用越优先 查看进程优先级(看 NI 列的值) ps -l ps -o comm,nice,2018年11月7日,Creative Commons License(BY-NC-SA),24,改变进程调度优先权 在启动进程时指定,在启动进程时就指定优先级: nice,2018年11月7日,Creative Commons License(BY-NC-SA),25,nice 优先级改变量 命令 &,是指优先级的增量 若为正,表示增加nice值,即降低进程优先权 若为负,表示减小nice值,即提高优先权 若缺省,则默认为 10,即 nice值 增加 10,nice命令举例,2018年11月7日,Creative Commons License(BY-NC-SA),26,nice 5 lp paper.pdf &,注:使用 nice 同样可以改变前台任务的优先级。,注:只有 root 才有权限提高一个进程的优先权。,例:,改变进程调度优先权 在进程运行过程中调整,进程运行后调整优先级: renice 在系统资源紧张时,可以通过降低其它不着急的进程的优先权,从而使得急用的进程能分得更多的 CPU 时间。 root 可以提高进程的优先权,但普通用户没这个权限。,2018年11月7日,Creative Commons License(BY-NC-SA),27,renice 5 p 2345 # -p 可以省略,注:普通用户一旦增加某