您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 第十章_Linux进程管理
第十章Linux进程管理Linux-system10第十章进程管理10.1进程与线程10.2查看进程10.3进程管理10.4计划任务10.1进程与线程•Linux是一个多用户、多任务的操作系统。多用户:指多个用户在同一时间使用计算机系统;多任务:指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。在操作系统设计上,从进程(Process)演化出线程(Thread),最主要的目的就是更好地支持多处理器,并且减小(进程/线程)上下文切换的开销。10.1进程与线程•到底什么是进程?有一个比较公认的定义:进程是指:在自身虚拟地址空间运行的一个单独的程序。进程不是程序,这是因为进程虽然是由程序产生的。但是有很多时候一个程序被执行,可以产生很多的进程。并且进程是动态、可变化的。而程序利用一个或者多个进程来执行自身的。线程和进程的最大区别在于线程完全共享相同的地址空间,运行在同一地址上10.1进程与线程•在linux系统中的所有进程都是相互关联的,除了初始化进程外,多个进程都有一个父进程,新的进程实际上是复制得来得,所有得进程都是有一个进程号为1的init进程衍生的。如:init---|---shell|------top10.1进程与线程init进程有两个作用。第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照。此时那些去了父进程的子进程就都会以init作为它们的父进程。10.1进程与线程•在进程管理中,进程和作业也是有一定区别的。区别如下:一个正在执行的进程成为一个作业一个作业可以包含多个进程作业控制是指:控制正在运行的进程行为。Shell将记录所有启动的进程情况,在每个进程过程中,用户可以任意挂起、重启进程。这就是作业控制的功能10.2查看进程如果打算管理进程,我们需要知道如何查看进程,只有这样才可以去管理我们的进程。可以管理进程的命令有很多,在这里我们将介绍以下几个管理进程的命令:pspstreekill10.2查看进程psps命令会显示当前系统内进程。ps名有二部分选项组成。第一部分是选择选项,第二部分是输出选项。由于ps选项很多,我们介绍几个常用的选项。使用前注意,ps的选项,有些前面需要带“-”符号,有些前面不要加“-”符号命令格式:ps[选项]10.2查看进程选择选项a选择一个终端下的进程,包括其他用户在该终端下的进程。x选择所有不在当前终端下的进程。-e选择所有的进程。输出选项u输出成面向用户的格式。-f完整的列表,主要是CMD下,能看见完整的命令。-l长格式,有进程的所属者,进程号和父进程号。10.2查看进程实例:[root@htroot]#psaux[root@htroot]#ps-elf这两套组合,第一套正好是都不带“-”符号的选项,第二套正好都是都带“-”符号的选项。而且也很容易记忆,aux是计算机中的一个术语,辅助设备的逻辑设备名。而elf是英文单词精灵的意思10.2查看进程输出的结果:USER程序是以哪个用户名的名义运行。UID程序以哪个UID的名义运行。PID进程号。Linux中PID号1-32768,到了最高值后,循环。PPID父进程号。已经在GRUB,init的步骤时候描述过父进程的作用。输出的结果:VSZ:使用虚拟内存大小RSS:使用内存大小STAT进程状态。D不能打断的状态(一般为IO)R运行状态(正在运行队列中)S休眠状态T回溯了或者停止了Z僵尸进程X死掉的进程10.2查看进程STAT进程状态。W没有足够的内存页可分配(2.6内核中无)高优先级N低优先级L有内存可配置并锁在内存中s包含子进程+位于后台的进程组如果当系统出现僵尸进程的时候,有三种解决方法。第一,杀PPID;第二,重启计算机;第三,修改程序源代码,重新编译,因为出现僵尸进程多半是由于程序本身有问题。第三种方法仅是在用户力所能及的状态。10.2查看进程NI优先级指数。TTY进程属于哪个终端。tty一般为本地终端。pts为X或者是远程。-表示系统后台。CMDCOMMAND都表示该进程所运行的实STIME程序从什么时候开始运行。PRI:每个进程的优先顺序SIZE:该进程的代码大小加上资料大小等因素的总数RSS:该进程占用的实际内存的数10.2查看进程pstreeLinux系统的进程和文件系统一样,都是一条树型的结构,所以可以使用pstree命令,让进程以树型结构显示出来。这样看起来,子父进程间的关系就更加明确了。以下是pstree常用的一些开关。-p在进程名旁显示PID。-a显示进程的详细信息。10.2查看进程•toptop用于动态查看系统资源使用情况,请参考第三章10.3进程管理信号的使用kill命令,从字面看kill似乎是杀掉进程,但是还有另外一些作用,比如暂停,继续。kill的操作对象是PID。一般都要先用ps或top等命令查处PID后,才能工作。kill的实际工作是对PID发送一个信号。-l查看信号列表。SIGTERM15终止进程。这也是默认值。SIGKILL9强制终止进程。SIGSTOP19暂停进程。SIGCONT18继续进程。SIGHUP1一般程序收到此信号会退出,有些程序能够用此信号来reload。使用方法:kill[信号]进程号10.3进程管理信号的使用[root@htroot]#kill-93245这样会强制杀死PID为3245的进程。[root@htroot]#kill-SIGHUP1让init进程重新载入/etc/inittab。10.3进程管理killallkillall可以不用找出PID,直接加上CMD就可杀除进程,但是,也有些缺点,它会把任何同名的程序全部删除。[root@htroot]#killallbash会杀掉所有正在使用的bash。10.3进程管理•进程前后台调度将一个正运行的进程放到后台运行在程序后面加上一个&即可,[root@ht/]#firefox&将浏览器放入后台运行[root@ht/]#jobs查看后台运行的程序[1]-Runningfirefox工作号状态程序10.3进程管理•[root@ht/]#bg1将工作号为1的调入后台运行•[root@ht/]#fg1调出前台运行•用kill%工作号,能够关闭进程。[root@ht/]#kill%1有时候,有些程序在用户退出时,就无法继续运行了。比如下载一些资料,但是要很久,而互用又要离开,必须注销离开。可以使用nohup来解决。[root@ht/]#nohupwget这样就可以顺利的注销,并且程序被放在了系统的后台运行。10.3进程管理•优先级的设置Linux可以动态修改进程的优先级,以确保每个进程都可以得到一些CPU时间。在Linux中进程的优先级从最低19到最高-20。数字越小,优先级越高。优先级具有继承性。子进程会从父进程处获得优先级指数。设置优先级主要使用nice和renice命令。[root@htroot]#nice00表示当前shell的优先级。10.3进程管理为程序定义一个初始化优先级指数。[root@htroot]#nice-19tail–fmessage&接着大家使用ps可以查看该程序所对应的那行,NI的值是19,系统最低的优先级,获得最少的CPU时间。[root@htroot]#nice--20message&给一个程序加上最高的优先级,最高的优先级指数是-20,注意这里是2个“-”号。查看:[root@htroot]#ps–elf10.3进程管理•renice•通过renice给一个已经在运行的程序动态修改优先级指数。先用ps命令查出你要修改的程序的PID。[root@htroot]#tail–f/var/log/messages&[1]2794[root@htroot]#renice1927942794:oldpriority0,newpriority19使用renice为程序设置优先级指数19。[root@htroot]#renice-2027942794:oldpriority19,newpriority-20使用renice为程序设置优先级指数-20。注意,这里和nice不同之处在于优先级指数前不需要使用“-”符号。普通用户只可以把自己的优先级指数增大,不能减小,包括回复原本的优先级。10.4计划任务进程是由程序执行后才产生的。程序的执行可以通过两种方法之一可以实现1.手动执行2.利用调度任务,依据一定的条件自动执行。就像windows中的计划任务如果打算让程序自动执行,您可以使用下面的命令来得已实现:atcron10.4计划任务•at的使用at,这是一个一次性的计划任务。at的执行主要依靠系统服务atd。系统中有2个文件/etc/at.allow和/etc/at.deny,这2个文件规定了系统谁可以使用at,谁不可以使用。超级用户随时可以使用at。其他用户则要受到以上2个文件的限制。总结如下:如果2个文件都存在,只检查/etc/at.allow,只有在/etc/at.allow中规定的用户才可以使用。如果只有/etc/at.deny存在,这个在该文件中不存在的用户都可以使用。如果2个文件都不存在,只有超级用户可以使用。10.4计划任务•at的使用•既然是计划任务,那么我们就要给命令指定一个时间,在什么时候运行。at能够接受多种时间格式。MM/DD/YY,MMDDYY,DD.MM.YY.,HH:mm,也可以用hh:mm加am和pm的修饰。还有一些特殊时间,比如midnight(0am),noon(0pm),teatime(4pm),now(现在)。•at还支持另外一种格式。时间+N时间单位,时间单位可以使用minutes,hours,days,weeks。N为一个具体整数。10.4计划任务•at的使用[root@htroot]#at23:59atshutdown-rnowatEOT输入完at加时间后,被确认是一个合法的时间后,会出现个“at”的命令行提示符。像平时在shell中一样输入命令,输入完后,按Ctrl+d,保存退出。注意:EOT实际上就是用Ctrl+d得到的10.4计划任务只输入时间,不输入日期,会被认为是在今天的某个时刻。如果只输入日期,不输入时间,被认为是被输入日期的现在这个时刻。也可以输入一个完整的时间。以下列出些时间格式的实例:at23:00;at12/27/04;at23:0012/27/04atnoon;at0:00pm12/28/04;atteatime+30minutes;at4:00pm+4days;10.4计划任务at的管理查询at的任务队列,使用atq命令。删除at任务队列中正在等待的项目。使用atrm命令。[root@htroot]#atq122010-12-2602:27aroot12表示队列号。2004-12-2602:27代表程序将在什么时候运行。[root@htroot]#atrm12删除了任务队列里一个等待的项目。可以使用“at-c队列号”来查看队列里等待项目的具体内容。10.4计划任务cron的使用对于有些东西,是一些每天都需要执行的任务,使用at就显得很不方便。使用cron。cron的运行主要依靠系统服务crond。系统中有2个文件/etc/cron.allow和/etc/cron.deny,这2个文件规定了谁可以使用cron,谁不可以使用。超级用户随时可以使用cron。其他用户则要受到以上2个文件的限制。
本文标题:第十章_Linux进程管理
链接地址:https://www.777doc.com/doc-6470153 .html