17_程序与资源管理_第1页
17_程序与资源管理_第2页
17_程序与资源管理_第3页
17_程序与资源管理_第4页
17_程序与资源管理_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、鸟哥的linux私房菜为取得较佳浏览结果,请爱川fiwfox浏览木网页i鸟站tr页i基础学习i服务器架设i企业应用i桌面应丿ij i安全管理i勺站讨论板i学园i书籍戡误i关于鸟哥i昆山资传i程序与资源管理切换分辨率为800x600最近更新h期:2005/09/18 木文己不再维护,更新文章请参考此处在linux当中,linux是如何分辨一个程序的呢?嗯!当我们的系统里血有太多的 死亡的程序的时候,应该怎样将该程序查出来之后并杀掉他呢?如果主机仅允许一 次登入一个终端机画面,如何从事多个工作的进行呢?还有,如何设定一个程序, 让他的执行顺序可以比较快速呢?!这个都是过程控制的重点项口呦!呵呵!另

2、外 一个又更常发生啦!如果我的x-window死掉了!但是我的linux基本上却还是活 着的时候,那么是否需要重新reboot呢?还是有其他的方式可以重新启动 x-window ?仔细瞧一瞧整个process的概念喔!1. 什么是程序(process):1.1 程序与执行文件(process & program)1.2 linux 的多人多任务环境2. t.作管理(iob control):&, ctrll-z, jobs, fg, bg, kih.3. 程序管理3.1 程序的观察: ps, top, pstree3.2 程序的删除:kill, killall3.3 系统资源的

3、观察: free, uname, uptime, netstat, dmesg, sar4. 关于程序的执彳亍丿帧序: nice, renice5. 特殊档案与程序:5.1 suid/sgid/sbit 的概念5.2 /proc/* 代表的意义5.3杳询已开启档案或已执行程序开启之档案:fiiscr, jsof, bdof6. 本章习题练习7. 纟匕对本文的建议:/viewtopic.php?t=23890什么是程序(process)由前面一连儿个章节的数据看来,我们一直强调在linux底下所有的指令与您能够进行 的动作都与权限有关,而系统如何判定你

4、的权限呢?当然就是前而账号管理章节当中 提到的uid/gid的相关概念,以及档案的属性相关性啰!再进一步来解释,您现在大 概知道,在linux系统当中:触发任何一个事件时,系统都会将他定义成为一个程序, 并且给予这个程序一个id ,称为pid,同时依据启发这个程序的用户与相关属性关系, 给予这个pid 一组有效的权限设定。从此以后,这个pid能够在系统上面进行的动 作,就与这个pid的权限有关了!看这个定义似乎没有什么很奇怪的地方,不过,您得要了解什么叫做触发事件才行 啊!我们在什么情况下会触发一个事件?而同一个事件可否被触发多次?呵呵!来了解 了解先!v程序与执行文件(process &am

5、p; program)我们如何产生一个process id (pid)呢?其实很简单啦,就是执行一个程序或指令就 对以触发一个事件了而取得一个pid啰!我们说过,系统应该是仅认识binary file的, 那么当我们要让系统工作的时候,当然就是需要启动一个binary file啰,那个binary file 就是程序(program)啦!那我们知道,每个程序都有三组人马的权限,每组人马都具有w/x的权限,所以:不同的使川者身份执行这个program 系统给予的权限也都不相同!举例来说,我们可以利用(ouch來建立一个空的档案,当root执行这个touch指令时,他収得的是uid/gid = 0

6、/0的权限,而当dmtsai(uid/gid=501/501)执行这个touch时,他的权限 就跟root不同啦!再举个更常见的例子,我们要操作系统的时候,通常是利川联机程序或者直接在主机前面登入,然后取得我们的shell对吧!那么,我们的shell是bash对吧,这个bash在/bin/bash对吧,那么同吋间的每个人登入都是执行/bin/bash对吧!不过,每个人取得的权限就是不同!也就是说,我们可以这样看:图一、程序与程序z间的差异也就是说,当我们登入并执行bash时,系统已经给我们一个pid t,这个pid就是 依据登入者的uid/gid (/etc/passwd)来的啦以上面的图来做

7、说明的话,我们知道 /bin/bash是一个程序(program),当dmtsai登入后,他取得一个pid号码为2234的 程序,这个程序的user/group都是dmtsai,而当这个程序进行淇他作业时,例如上而 提到的touch这个指令时,那么由这个程序衍生出来的其他程序在一般状态下,也会沿 用这个程序的相关权限的! 子程序与父程序:在上面的说明里面,我们有提到所谓的衍牛出來的程序,那是个啥咚咚?这样说 好了,当我们登入系统后,会取得一个bash的shell ,然后,我们用这个bash提 供的接口去执行另一个指令,例如/usr/bin/passwd或者是touch等等,那些另外执 行的指令

8、也会被触发成为pid,呵呵!那个pid就是子程序了,而在我们的bash 环境下,就称为父程序了!另外,是否还记得我们在bash shell那一篇电面有提到环境变量在不同程序之 间的呼叫呢?现在稍微晓得是什么意思了吗?是啦!因为我们有执行不同的bash 嘛!既然执行两次,自然就会取得两个p1d,而因为要让两个p1d之间具有一些和 关性,我们的bash就使川了环境变量啰! 例题:请在目前的bash环境下,再触发一次bash ,并以ps这个指令观察 程序相关的输出信息。答:直接执行bash ,会进入到子程序的坏境中,然后输入ps -1后,出现:f suid pid ppidc iriniaddr z

9、 wchanttytime cmd0 s500 21337 2136 07501348 vait pts/100:00:00 bah0 s500 22573 2137 2750 -1348 vait pts/100:00:00 bah0 r500 2591 22575 0760-1302 -pts/100:00:00 ps有看到那个pid与ppid吗?第一个bash的pid与第二个bash 的 ppid都是21337啊,因为第二个bash是来自于第一个所产牛的嘛!重点来啦!所以说,在系统上而的各个程序可能是有相关性的喔!也就是有所谓的父程 序与子程序的关系至于程序的相关性,我们可以使用pstr

10、ee这支程序去查验,就能知 道彼此z间的关系了。另外要注意的是:所谓擒贼先擒王,如果哪天你一ft发现奇怪,怎么有个程序关 闭后,不久乂会自动产生?而且自动产生的pid还不一样!,呵呵!大概不需要怀疑 的是,如果不是例行性命令的影响,肯定有一支父程序存在,他会一直重新触发你想 要关闭的那个程序,导致你老是关不了。那怎么办?不是说过擒贼先擒王吗?关闭那支 父程序啦! a_a其实子程序与父程序之间的关系还挺复杂的,最大的复杂点在于程序互相之间的呼叫, 以及两者权限的相关性!这个可能就得要您自己多多建立自己的经验了 系统或网络服务:常驻在内存的程序如果就我们之前学到的-些指令数据來看,其实我们下达的指

11、令都很简单,包括用is显 示档案啊、丿u touch建立档案啊、rm/mkdir/cp/mv等指令管理档案啊、 chmod/chown/passwd等等的指令来管理权限等等的,不过,这些指令都是执行完就结束 了。也就是说,该项指令被触发后所产生的pid很快就会终止呢!那有没有一直在执 行的程序啊?当然有啊!而口多的是呢!举个简单的例子来说好了,我们知道系统每分钟都会去扫瞄/ctc/crontab以及相关的配置 文件,来进行工作排程吧?那么那个工作排程是谁负责的?当然不是鸟哥啊!呵呵! 是crond这个程序所管理的,我们将他启动在育景当中一直持续不断的运作,套句以前 dos年代常常说的一句话,那

12、就是常驻在内存当中的程序啦!这些常驻在内存当中的程序有很多,不过主要大致分成系统木身所需要的服务,例如刚 刚提到的crond及atd ,还有syslog等等的。还有一些则是负责网络联机的服务,例 如apache, named, postfix, vsftpd.等等的。这些网络服务比较有趣的地方,在于这些程 序被执行后,他会启动一个可以负责网络监听的端口口 (port),以提供外部客户端(client)的联机要求。这部分我们会在认识系统服务的地方再好好的讲一讲,在这里,您先有个概念,大概知 道一下,系统上而的p1d儿乎都是透过执行一些指令所产生的,而这些指令可能会负 责一些重耍的工作,例如网络服

13、务器啊、系统效能维持啊、或是其他系统重耍工作等等。 若有兴趣的话,可以先以netstat检查一下您主机上的网络服务喔! linux的多人多任务环境我们现在知道了,其实在linux底下执行一个指令时,系统会给予这个动作一个id, 我们称为pid,而根据启川这个指令的川户与相关的指令功能,而给予这个特定pid 一组权限,该指令可以进行的行为则与这个p1d的权限有关。根据这个说明,我们 就可以简单的了解,为什么linux这么多川户,但是却每个人都可以拥有自己的环 境了吧! a_a多人环境:linux最棒的地方就在于他的多人多任务环境了!那么,什么是多人多任务? !在linux 上而允许不同的人使用,

14、而冃每个人都有其特殊的权限,只有一个人具有至高无上的权 力,那就是root (系统管理员),除了他z外,其他人都必须要受一些限制的!而每个人 进入linux的环境设定都可以随着每个人的喜好來设定(还记得我们在bash那一章 提过的/.bashrc吧! ?对了!就是那个光! )!现在知道为什么了吧?因为每个人登入 后取得的shell的pid不同嘛!多任务行为:我想,在某些其他操作系统中,您对能会遇到这样的事情:这个档案止在使用中,您 无法开启这个档案!我哩勒!述得将止在执行当中的程序关掉z后才能开这个中间暂存 档!而h.这个时候还只有我自己一个人在使用呢受不了呵呵!不过,linux就不 会这样啰

15、!您可以同时在不同的画面,同时由不同的人(当然啰,右的是经由ssh网络 联机过来,有的是直接在屏幕前面的朋友啰!)使川同一个档案,不论是开启或者是 修改,只要您有权限,就可以使用该档案!这个东西可有川的紧!由于鸟哥是很常使川程序的(就是fortran啦,吃饭的工具!), 而由于我们有一部主机专门用來工作的,所以配备比较高档一点piii的双cpu),那么 我就可以同时的进行两个compiler的程序,而且还不会互相的彫响,并且资源分配的 还蛮均匀的!哈哈!怎么会跑得这么顺畅呀!爽毙了!其实操作系统的多任务是很复杂的行为啦!尤其涉及将多个工作直接丢给一颗cpu来处 理现在我们应该比较清楚的是,所谓

16、的工作其实是将多个指令触发成为系统程序 (pid),而这些程序若同时被触发时,那么一颗cpu就得要同时负责许多工作了。但 我们晓得的是,并非每个程序都很耗系统资源,例如前一节提到的crond与atd这两个 系统服务,他们并没有消耗很多系统资源的。此时,当然啰,cpu就可以进行其他丄 作,这就是所谓的多任务!多重登入环境的七个基木终端窗口: 在linux当中,默认提供了六个文字界而登入窗口,以及一个图形界而,你可以使用 (alt+f1.f7来切换不同的终端机界面,而且每个终端机界面的登入者还可以不同 人!很炫吧!这个东西对就很有用啦!尤其是在某个程序死掉的时候!其实,这也是多任务环境下所产牛的一

17、个情况啦!我们的linux默认会启动六个终端机 背入环境的程序,所以我们就会有六个终端机接口。您也可以减少啊!就是减少启动的 终端机程序就好了。详细的数据可以先查阅/etc/inittab这个档案,未来我们在开机管理 流程会再仔细的介绍的!特殊的程序管理行为:以前的鸟哥笨笨的,总是以为使川windows 98就可以啦!后来,因为工作的关系,需 要使川unix系统,想说我只要在工作机前面就好,才不要跑来跑去的到unix工作站 前面去呢!所以就使用windows连到我的unix工作站工作!好死不死,我一个程序跑下来要23天,唉偏偏常常到了第2.5天的时候,windows 98就给他挂点去!当初真的

18、是给他怕死了后來因为换了新计算机,用了随机版的 windows 20(x),呵呵,这东西真不错(指对单人而言),在当机的时候,他可以仅将错 谋的程序踢掉,而不干扰其他的程序进行,呵呵!从此以后,就不用担心会当机连连啰! 不过,2000毕竟还不够好,因为有的时候还是会死当!那么linux呢?哈呛!更棒了,儿乎可以说绝对不会当机的!因为他可以在任何吋候,将 某个被困住的程序杀掉,然后在重新执行该程序而不用重新启动!够炫吧!那么如杲我 在linux下以文字界面登入,在屏幕当中显示错误讯息后就挂了动都不能动,该如何 是好!?这个时候那默认的七个窗口就帮上忙啦!你可以随意的再按altrffl.f71 来

19、切换到其他的终端机界血,然后以ps -aux找曲刚刚的错误程序,然后给他kill 一下, 哈哈,回到刚刚的终端机界血!恩棒!又回复止常啰!为什么可以这样做呢?我们刚刚不是提过吗?每个程序之间可能是独立的,也可能有相 依性,只要到独立的程序当中,删除有问题的那个程序,当然他就可以被系统移除掉啦! a a bash坏境卜的工作管理(job control)我们在上一个小节有提到所谓的父程序、子程序的关系,那我们登入bash之片, 就是取得一个名为bash的pid t,而在这个环境底下所执行的其他指令,就几乎 都是所谓的子程序了。那么,在这个单一的bash接口下,我可不可以进行多个工作 啊?当然可以

20、啦!可以同吋进行喔!举例来说,我可以这样做:rootlinux # cp filel file2 &在这一串指令中,重点在那个&的功能,他表示将filel这个档案复制为file2 , h放 置于背景中执行,也就是说执行这一个命令z后,在这一个终端接口仍然对以做其他的 工作!而当这一个指令(cp filel ®e2)执行完毕z后,系统将会在您的终端接口显示完成 的消息!很便利喔!多人多任务的系统资源分配问题考虑: 多人多任务确实有很多的好处,但其实也有管理上的困扰,因为使用者越来越多,将导 致你管理上的困扰哩!另外,由于使用者h盛,当使用者达到一定的人数后,通常你的 机

21、器便需耍升级了,因为cpu的运算与ram的大小可能就会不敷使用!举个例子来说,鸟哥z前的网站管理的有点不太好,因为使用了一个很复杂的人数统计 程序,这个程序会一直去取川mysql数据库的数据,偏偏因为流量人,造成mysql 很忙碌。在这样的情况下,当鸟哥要登入去写网页数据,或者要去使川讨论区的资源时, 哇!慢的很!简直就是龟速啊!后来终于将这个程序停止不用了,以自己写的一个 小程序來取代,呵呵!这样才让cpu的负载(loading)敕个降下來用起來顺畅多了! a a 好了!废话说完了!开始来谈-谈儿个常用的指令吧!a工作管理(job control): &, ctrl-z, jobs,

22、 fg, bg, kill这个工作管理(job control)是用在bash环境下的,也就是说:当我们登入系统取得 bash shell之后,在单一终端机接口下同时进行多个工作的行为管理jo举例来说,我们 在登入bash后,想要一边复制档案、一边进行资料搜寻、一边进行编译,还可以一边 进行vi程序撰写!当然我们可以車复登入那六个文字接口的终端机环境中,不过,能 不能在一个bash内达成?当然可以啊!就是使用job control啦! a_a从上而的说明当中,您应该要了解的是:进行工作管理的行为中,其实每个工作都是 h前bash的子程序,亦即彼此z间是有相关性的。我们无法以job contro

23、l的方式由 ttyl的环境去管理tty2的bash !这个概念请您先建立起来,后续的范例介绍之后, 您就会清楚的了解啰!或许你会觉得很奇怪啊,既然我可以在六个终端接口登入,那何必使川job contro 1呢? 真是脱裤子放屁,多此一举啊!不要忘记了呢,我们可以在/etc/security/liinits.conf 面 设定使川者同时可以登入的联机数,在这样的情况下,某些使川者可能仅能以一个联机 來工作呢!所以啰,您就得要了解一下这种工作管理的模式了!此外,这个章节内容 也会牵涉到很多的数据流重导向,所以,如果忘记的话,务必冋到bash shell看一看 喔!总z,要进行bash的job co

24、ntrol必须要注意到的限制是: 程序必须來是shell的child process 程序不能等待terminal/shell的输入(input)立接将指令丢到背景中执行的& :瞎密?将某个指令丢到背景当中?在一个bash的环境下,什么叫做前景 (foreground)与背景(background) j ?我们先来简单的定义一下:o 前景:您口j以控制的这个工作称为前景的工作(foreground);o背呆:在内存内可以白行运作的工作,您无法直接控制他,除非以bg/fg 等指令将该工作呼叫出来。如同前血提到的,我们在只有一个bash的环境f,如果想要同时进行多个工作,那 么町以将某些工

25、作丢到背景环境当中,让我们可以继续操作前景的工作!那么如何将 工作丢到背景中?最简单的方法就是利用&这个玩意儿了!举个简单的例子, 我们要将/etc/整个备份成为/tmp/etc.tar.gz时,乂不想要等待,那么可以这样做: rootlinux # tar -zpcf /tmp/etc.ta/etc &1 24874<= job number pidrootlinux -#v=可以继续作业,不受影响!这就是前景!仔细的瞧一瞧,我在输入一个指令后,在该指令的最后面加上一个&代表将该 指令丢到背景中,此时bash会给予这个指令一个工作号码dob number),就翩

26、 个1啦!至于后面那个24874则是该指令所触发的f pid了!而有趣的 是,我们可以继续操作bash呢!很不赖吧!不过,那么丢到背景中的工作什么时 候完成?完成的时候会显示什么?如果你输入儿个指令后,突然出现这个数据:1+ donetar -zpcf /tmp/etc.tar.gz /etc就代表1这个工作已经完成(done),该工作的指令则是接在厉而那一串指令列。 这样了解了吧? !另外,这个&代表:将工作丢到背景中去执行喔!注意到那 个执行的字眼!此外,这样的情况最大的好处是:不怕被lctrlj-c中断的啦!此外,将工作丢到背景当中要特别注意资料的流向喔!举例来说,如杲我将刚刚那

27、个 指令改成:rootlinux # tar zpcvf /tmp/etc.ta匚gz /etc &情况会怎样?呵呵,在背景当中执行的指令,如果有stdout及stderr时,他的数据 依旧是输出到屏幕上血的,所以,我们会无法看到提示字符,当然也就无法完好的掌 握前景工作。所以啰,最佳的状况就是利川数据流重导向,将输出数据传送至某个 档案中。举例来说,我可以这样做:frootlinux # tar -zpcvf /tmp/etc.ta匚gz /etc > /tmp/log.txt 2>& 1 &1 24984frootlinux # 呵呵!如此一来,数据都给

28、他传送到/tmp/log.txt当中,当然就不会影响到我们询景的作 业了。这样说,您应该可以更清楚数据流重导向的重要性了吧? !在vi的一般模式下,按下ctrl及z这两个按键,屏幕上会出现1,表示这是第一 个工作,而那个+代表目前在背景下预设被取用的那个工作(与fg这个指令有关)! 而那个stopped则代表目前这个工作的状态。在预设的情况下,使用ctrl-z丢到背景 当屮的工作都是暂停的状态喔!观察目前的背景工作状态:jobsrootlinux # jobs -lrs参数:-1 :除了列出job number之外,同时列岀pid-r :仅列出正在背景run的工作;-s :仅列出正在背景当中暂

29、停(stop)的工作。范例:范例一:观察目前的bash当屮,所有的工作,与对应的pidrootlinux # jobs 11+ 24988 stopped/usr/bin/vim /.bashrc2- 25006 stopped/usr/bin/vim /.bash_history如果想要知道口前有多少的工作在背景当中,就用jobs这个指令吧! -般来说,直接下 达jobs即可!不过,如果您还想要知道该job number的pid号码,可以加上-1这 个参数啦!在输出的信息当屮,例如上表,仔细看到那个+号喔!那个+代表预设 的取川工作。所以说:【前我有两个工作在背景当屮,两个工作都是暂停的,而

30、如果 我仅输入fg时,那么那个1会被拿到前景当中来处理!将背景工作拿到询景来处理:fg刚刚提到的都是将工作丢到背景当中去执行的,那么有没有可以将背景工作拿到前呆 來处理的?有啊!就是那个fg啦!举例來说,我们想要将上头范例当中的工作拿 出来处理时:rootlinux # fg %jobnumber参数:%jobnumber :工作的号码。注意,那个%是可有可无的!范例:rootlinux # jobs1+ stopped2卜 stopped rootlinux # fg rootlinux # fg %2范例一:先以jobs观察工作,再将工作取出:/usr/bin/vim /.bashrc/u

31、sr/bin/vim /.bash_historyv=预设取出那个+的工作,亦即1v=直接规定取出的那个工作号码!经过fg指令就能够将背呆工作拿到前呆来处理啰!让工作在背景下进行:bg我们刚刚提到,那个ctrl-z可以将目前的工作丢到背景底下去暂停,那么如何 让一个工作在背景底下run呢?我们可以在底卞这个案例当屮来测试!注意喔! 底下的测试要进行的快一点! a_a范例一:一执行find / -perm +7000后,立刻丢到背景去暂停!rootlinux # find / -perm +7000#此时,请立刻按下ctrl-z暂停!1 + stoppedfind / -perm +7(x)0r

32、ootlinux #范例二:让该工作在背景下进行,并且观察他!rootlinux # jobs ; bg % 1 ; jobsfl+ stoppedfind / -perm +7000fl+find/-perm +700() &1+ runningfind / perm +7000 &看到哪里有差异吗?呼呼!没错!就是那个状态栏以经由stopping变成了 running 啰!看到差异点,嘿嘿!指令列最后方多了一个&的符号啰!代表该工作被启动在背 景当中了啦! a_a管理背景当中的工作:kill刚刚我们可以让一个已经在背景当中的工作继续工作,也对以让该工作以fg拿到前

33、景来,那么,如果想要将该工作直接移除呢?或者是将该工作重新启动呢?呵呵!这 个时候就得需要给予该工作一个讯号(signal),让他知道该怎么作才好啊!此时, kill这个指令就派上用场啦!rootlinux # kill -signal %jobnumberrootlinux # kill -1参数:-1:这个是l的小写,列出tl前kill能够使用的讯号(signal)有哪些?signal :代表给予后面接的那个工作什么样的指示啰!用man 7 signal可知:-1 :重新读取一次参数的配置文件(类似reload);-2 :代表与由键盘输入ctrl-c同样的动作;-9 :立刻强制删除一个工作

34、;-15:以正常的程序方式终止一项工作。与-9是不一样的。范例:范例一:找出目前的bash坏境下的背景工作,并将该工作删除。rootlinux # jobs1+ stoppedvim bashrcrootlinux # kill -9 %1范例:找出目前的bash环境下的背景工作,并将该工作终止掉。rootlinux # jobs1+ stoppedvim bashrcrootlinux # kill -sigterm %11+ 终止vim bashrc# -sigterm与-15是一样的!您可以使用kill -1来查阅!特别留意一下,-9这个signal通常是用在强制删除一个不正常的工作1时

35、所使用的, -15则是以正常步骤结束一项工作(15也是默认值),两者之间并不相同呦!举上而的例子 來说,我用vi的时候,不是会产生一个.filename.swp的档案吗?那么,当使用-15这 个signal时,vi会尝试以正常的步骤来结朿掉该vi的工作,所以.filename.swp会 主动的被移除,但若是使用-9这个signal时,由于该vi工作会被强制移除掉,因 此,.filename.swp就会继续存在文件系统当中。这样您应该可以稍微分辨一下了吧?其实,kill的妙川是很无穷的啦!他搭配signal所详列的信息(jij man 7 signal去査阅 相关数据)可以让您有效的管理工作与程

36、序(process),此外,那个killall也是同样的用 法!至于常用的signal您至少需要了解1, 9, 15这三个signal的意义才好。此外, signal除了以数值來表示z外,也可以使用讯号名称喔!举例來说,上回的范例二就是 一个例子啦!至于signal number -u名称的对应,呵呵,使用kill -1就知道啦(l的小写)!0程序管理本章一开始就提到所谓的程序的概念,包括程序的触发、子程序与父程序的相关性 等等,此外,述有那个程序的相依性以及所谓的殖尸程序等等需耍说明的呢! 为什么程序管理这么垂要呢?首先,由于我们在操作系统时,各项工作其实都是经过某个pid来达成的,因 此,

37、能不能进行某项工作,就与该程序的权限有关了。再来,如果您的linux系统是个很忙碌的系统,那么当整个系统资源快耍被使用 光时,您是否能够找出最耗系统的那个程序,然后删除该程序,让系统恢复正常呢?此外,如果由于某个程序写的不好,导致产生一个有问题的程序在内存当中,您 又该如何找出他,然后将他移除呢?如果同时有五六项工作在您的系统当中运作,但其中有一项工作才是最亜耍的, 该如何让那一项重要的工作被瑕优先执行呢?所以啰,一个称职的系统管理员,必须要熟悉程序的管理流程才行,否则当系统发生问 题时,还真是很难解决问题呢!当然啦,程序的管理其实也是很难理解的部分,尤其 讲到子程序与父程序z间的关系,更不容

38、易理解。伤脑筋啊!无论如何,咱们还是得来 看一看,系统上面到底有多少程序在运作啊?0程序的观察既然稈序这么巫要,那么我们如何查阅系统上血止在运作当中的程序呢?很简巾啊!利用静态的ps或者是动态的top,还能以pstree来查阅程序树z间的关系喔! psrootlinux # ps auxrootlinux # ps -1arootlinux # ps axjf参数:-a :所有的process均显示出來,与-e具有同样的效用;-a :不与teitninal有关的所有process ;-u :有效使用者(effective user)相关的 process ;x :通常与a这个参数-起使用,可列

39、出较完整信息。输出格式规划:1:较长、较详细的将该pid的的信息列出;j : i '.作的格式(jobs format)-f :做一个更为完整的输出。特别说明:由于ps能够支持的os类型相当的多,所以他的参数多的离谱! 而且有没有加上差很多!详细的用法应该要参考manps嘱! 范例:范例一:将目前属于您自己这次登入的pid与相关信息列示出来 rootlinux # ps -1f suidpidppidc prini addr szwchanttytimecmdos05881565407601303 waitpts/o00:00:00 su4s05882588107501349 wait

40、pts/o00:00:00 bash4r0603758820760-1111 -pts/o00:00:00 ps#上面这个信息其实很多喔!各相关信息的童义为:#f代表这个程序的旗标(flag), 4代表使用者为super user;#s代表这个程序的状态(stat),关于各stat的意义将在内文介绍;#pid 没问题吧!?就是这个程序的id啊!底下的ppid则上父程序的id;# ccpu使用的资源百分比#pri 这个是priority (优先执行序)的缩写,详细后回介绍;#ni 这个是nice值,在下一小节我们会持续介绍。# addr 这个是kernel function,指出该程序在内存的那

41、个部分。如果是个limning# 的程序,一般就是j的啦!#sz使用掉的内存大小;#wchan目前这个程序是否正在运作当屮,若为表示正在运作;# tty 登入者的终端机位置啰;#time使用掉的cpu时间。# cmd所下达的指令为何! ?#仔细看到每一个程序的pid与ppid的相关性为何喔!上头列出的三个程序中,#彼此间可是有相关性的吶!范例二:列出tl前所有的正在内存当中的程序:rootlinux # ps auxuserpi)%cpu%memvszrss ttystat start timecommandroot10.00.11740540?sjul250:01 init 3root20.

42、00.000?snjul250:00 ksoftirqd/oroot30.00.000?s<jul250:00 events/0.中间省略root58810.00.352121204 pts/os10:220:00 suroot58820.00.353961524 pts/os10:220:00 bashroot61420.00.24488916 pts/or+11:450:00 ps aux范例三:以范例一的显示内容,显示出所令的程序:rootlinux # ps -1auidpidppidc prini addr sz wchanttytimecmd4s0100760435 -?00

43、:00:01 init1 s021094190 ksofti ?00:00:00 ksoftirqd/o1 s031070-5 -0 worker ?00:00:00 events/0以下省略范例四:列出类似程序树的程序显示:rootlinux # ps -axjf0 10 0?-1 s0 0:01 init 31 2 0 0?-1 sn0 0:00 ksoftirqd/0中间省略.1 5281 5281 5281 ?-1 ss00:00 /usr/sbin/sshd5281 5651 5651 5651 ?-1 ss00:00 _ sshd: dmtsai fpriv5651 5653 56

44、51 5651 ?-1 s5000:00_ sshd: dmtsaipts/o5653 5654 5654 5654 pts/o6151 ss5000:00_ -bash5654 5881 5881 5654 pts/o6151 s00:00_ su5881 5882 5882 5654 pts/o6151 s00:00_ bash5882 6151 6151 5654 pts/o6151 r+00:00_ ps -axjfppid pid pgidsid ttytpgid stat uid time command#看出来了吧?其实鸟哥在进行一些测试时,都是以网络联机进主机来测试的, #所以

45、啰,你会发现,嘿嘿!其实程序之间是有相关性的啦!不过,#其实还可以使用pstree来达成这个程序树喔!底下在仔细谈一谈。范例五:找出与cron与syslog这两个服务有关的pid号码? rootlinux # ps aux i egrep '(cronlsyslog)'root15390.00.11616616?ssjul250:03 syslogd -m 0root16760.00.245441128 ?ssjul 250:00 crondroot61570.00.13764664 pts/or+12:100:00 egrep (cronlsyslog)#所以号码是1539及

46、1676这两个啰!就是这样找的啦!说真的,如果你曾经使用manps的话,呵呵!可能会被里血的说明搞的一脸茫然因 为支持的类型实在太多,所以,ps -aux与ps aux显示的结果可能是不一样的, 那个-u后血接的是有效的使用者id,所以,ux可能是有一个user名称为x 而如果没有x这个川户,那么屏幕上面会显示一个警告讯息,并以ps aux来输出。哇! 真是麻烦所以,您可以直接记得使用psaux就好了! 在预设的情况下,ps仅会列出与目询所在的bash shell有关的pid而已,所以,当 我使用ps -1的时候,只有三个pid (范例一)。注意一下,我有一个bash的pid ,而 且也有一个

47、ps的pid , 了解了吧?呵呵!在bash电面执行程序时,是会触发一个新 的process的喔!而且,两者之间是有相关性的,看p1d与pp1d的号码,你就会晓得 两者的差异了! 那么,什么是有效使用者id呢?还记得我们提过的suid吧?我以dmtsai去执 行/usr/bin/passwd取得的那个process竟然是root的权限喔!此时,实际的使用者 (real user)是dmtsai ,但是有效的使川者(effective user)是root啦!这样说,可以理 解吧! ? 一般來说,鸟哥会建议您,直接使用ps auxj这个指令参数即可,显示的结果例如上 面的范例二啰。在范例二的各个

48、显示项目代表的意义为:o user:该process属于那个使用者账号的?o pid :该 process 的号码。o %cpu:该process使用掉的cpu资源百分比;o %mem:该process所占用的物理内存百分比;o vsz :该process使用掉的虚拟内存量(kbytes)o rss :该process占川的固定的内存量(kbytes)o tty :该process是在那个终端机上面运作,若与终端机无关,则显示?, 另外,ttyl-tty6是本机上而的登入者程序,若为pts/o等等的,则表示为山 网络连接进主机的程序。o stat:该程序t前的状态,主耍的状态有:r :该程序目

49、就正在运作,或者是可被运作;s :该程序目前正在睡眠当中(可说是idle状态啦!),但可被某些讯号(signal)唤 醒。t :该程序目前止在侦测或者是停止了;z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成zombie (赠尸) 程序的状态o start:该process被触发启动的时间;o time :该process实际使川cpu运作的时间。o command:该程序的实际指令为何?我们取这一行來做个简单的说明:root 5881 0.0 0.352121204 pts/o s 10:220:00 su该程序属于root所有,他的pid号码是5881,该程序对于cpu的使用

50、率很低啊! 至于占用的物理内存大概有0.3%这么多。至于该程序使用掉的虚拟内存量为5212 k,物理内存为1204 k,该程序属于pts/o这个终端机,看来这个程序应该是来口 网络的联机登入。该程序目前是sleep的状态,但其实是可以被执行的。这个程序 由今天的10:22开始运作,不过,仅耗去cpu运作时间的0:00分钟。该程序的 执行就是su这个指令啦!除此之外,我们必须要知道的是疆尸(zombie)程序是什么?通常,造成疆尸程 序的成因是因为该程序应该己经执行完毕,或者是因故应该要终止了,但是该程序 的父程序却无法完幣的将该程序结束掉,而造成那个程序一直存在内存当中.如果 您发现在某个程序

51、的cmd后面还接上<defunct>时,就代表该程序是疆尸程序啦, 例如:apache 8683 0.0 0.9 83384 9992 ? z 14:330:00 /usr/sbin/httpd <defunct>当系统不稳定的时候就容易造成所谓的疆尸程序,可能原因是因为程序写的不好啦,或 者是使用者的操作习惯不良等等所造成。如果您发现系统中很多媼尸程序时,呵呵!记 得啊!要找出该程序的父程序,然后好好的做个追踪,好好的进行主机的环境优化啊!看 看有什么地方需要改善的,不要只是垃接将他kill掉而己呢!不然的话,万一他一垃产 生,那可就麻烦了! _ toproollin

52、ux # lop -d i top -bnp参数:-d :后血可以接秒数,就是整个程序画血更新的秒数。预设是5秒;-b :以批次的方式执行top ,述有更多的参数可以使用喔!通常会搭配数据流重导向来将批次的结果输出成为档案。-n :与-b搭配,意义是,需要进行儿次top的输出结果。-p :指定某些个pid来进行观察监测而已。在top执行过程当中可以使用的按键指令:?:显示在top当屮可以输入的按键指令;p :以cpu的使用资源排序显示;m :以memory的使用资源排序显示;n :以pid來排序喔!t :由该process使用的cpu时间累积(time+)排序。k :给予某个pid 一个讯号(

53、signal)r :给予某个pid重新制订一个nice值。范例:范例一:每两秒钟更新一次top ,观察整体信息:rootlinux # top -d 2top - 18:30:36 up 30 days, 7 min, 1 user, load average: 0.42, 0.4& 0.45tasks: 163 total, 1 running, 161 sleeping, 1 stopped, 0 zombiecpu(s): 4.7% us, 4.0% sy, 6.3% ni, 82.5% id, 0.4% wa, 0.1% hi, 2.0% simem:1033592k tota

54、l, 955252k used, 78340k free, 208648k buffersswap: 1052216k total, 728k used, 1051488k free, 360248k cached v二二如果加入k或r时,就会有相关的字样出现在这里喔!pid userprnivirtresshr s%cpu %memtime+command3981 apache3419 84012llm7352s 17.31.20:00.09 httpd1454 mysql160289m40m 2228s3.84.0 115:01.32 mysqld3985 dmtsai1502148904668 r3.80.10:00.03 top1 root1603552552472 s0.000:08.90 init2 rootrt000os0.00.00:52.76 migration/03 root341900os0.0().00:03.01 ksoftirqd/o范例二:将top的信息进行2次,然后将结果输出到/tmp/top.txt rootlinux # top -b -n 2 > /tmp/top.txt#这样一來,嘿嘿!就可以将top的信息存到/tmp/top.txt档案中了。范例三:假设10604

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论