Linux系统管理员工具包进程管理技巧

上传人:dus****log 文档编号:88683181 上传时间:2022-05-11 格式:DOC 页数:12 大小:31KB
收藏 版权申诉 举报 下载
Linux系统管理员工具包进程管理技巧_第1页
第1页 / 共12页
Linux系统管理员工具包进程管理技巧_第2页
第2页 / 共12页
Linux系统管理员工具包进程管理技巧_第3页
第3页 / 共12页
资源描述:

《Linux系统管理员工具包进程管理技巧》由会员分享,可在线阅读,更多相关《Linux系统管理员工具包进程管理技巧(12页珍藏版)》请在装配图网上搜索。

1、Linux系统管理员工具包进程管理技巧Linux系统管理员工具包:进程管理技巧2010-11-30 14:45本文属转载自网络,仅供个人娱乐参考使用,如有转载请标明出处,若有侵权等后果,本人概不负责!本文章如果无意对他人著作权及相关权利构成侵犯,一经权利人要求,本人将立即删除。学习如何获取所需的UNIX进程信息。对于所有的系统管理员来说,了解自己的UNIX系统正在运行的进程是最基本的要求之一。标准的进程列表很有用,但是它所提供的信息格式不正确或者没有包含所需的进程或信息。能从进程列表中选择特定类型的数据将使管理任务更加容易。在本文中,您将了解到如何扩展该进程列表以改善信息的可读性,或者提供在其

2、他地方不易获得的摘要和信息。您还将看到如何跨不同的UNIX平台获取进程信息的标准化的方法。关于本系列通常,UNIX管理员都拥有一套他/她经常使用协助管理进程的实用程序、技巧和系统。有一些重要的实用程序、命令行链以及脚本可用来简化各种处理过程。这些工具中有一部分来自于操作系统,而大部分的技巧则来源于长期的经验和简化系统管理员工作的要求。本系列文章主要专注于最大限度地利用各种UNIX环境中可用的工具,包括简化异类环境中的管理任务的方法。使用psps命令行工具列出了正在运行的进程。该工具存在于所有的UNIX变种中,并且大体上都按相同的基本方式工作,即向内核请求正在运行的进程列表,然后报告进程列表及其

3、属性,如内存使用情况、运行时间和其他详细信息。ps工具实际上是一个非常强大的工具,尽管许多管理员可能仅使用可用选项中的某一两项来查看所需的信息。可以利用内置命令行选项从命令中获取更多的信息,甚至可以将ps通过管道与其他命令结合起来,以获取所需的准确信息。列出所有进程即使是以root身份登录,ps的标准输出也只列出了您所运行的进程。根据您的UNIX环境是基于BSD或者AT&T,SysV UNIX基础部分对用来获取系统中其他进程信息的基本命令行选项做出相应的变动,或者改变所显示的信息。在基于BSD的UNIX环境中,输出包括进程ID、终端、状态、时间(在CPU中的执行时间,单位为秒,而不是进程开始运

4、行的时间),以及所执行的命令,如清单1所示。清单1列出BSD UNIX变种上的进程$ps PID TT STAT TIME COMMAND 391 p5 S0:00.24/bin/bash9165 p5 S+0:00.50 emacs 476 p6 S0:01.03/bin/bash9299 p6 S0:00.09 xterm9319 p6 S0:00.07 xterm9423 p6 S0:00.12 ftp atuin9513 p6 R+0:00.01 ps9301 p7 Ss+0:00.01/usr/X11R6/bin/luit9302 p8 Ss+0:00.03 bash9321 p9

5、Ss+0:00.01/usr/X11R6/bin/luit9322 pa Ss+0:00.02 bash在SVR4环境中,所提供的列较少(您得不到进程状态信息),如下面的清单2所示。清单2.列出SVR4 UNIX变种上的进程$ps PID TTY TIME CMD19915 pts/3 00:00:00 bash29145 pts/3 00:00:00 emacs32256 pts/3 00:00:00 emacs26986 pts/3 00:00:00 xterm31303 pts/3 00:00:00 ftp31358 pts/3 00:00:00 ps要获取系统中正在运行的所有进程的列表

6、,需要根据所使用的UNIX变种来使用不同的命令行选项。在BSD UNIX中,-a命令行选项列出了包括您自己在内的所有用户的进程。然而,这个列表并不会包括那些没有控制终端的进程(比如那些在启动时开始执行的进程、守护进程以及那些作为cron工作的一部分的进程)。要获取所有正在运行的进程的列表,必须使用-A命令行选项(请参阅清单3)。清单3.列出BSD系统上的所有进程$ps-A PID TT STAT TIME COMMAND 1?S s0:15.47/sbin/launchd 23?Ss 0:00.02/sbin/dynamic_pager-F/private/var/vm/swapfile 27

7、?Ss 0:00.95 kextd 49?Ss 0:05.17/usr/sbin/configd 50?Ss 0:01.89/usr/sbin/coreaudiod 51?Ss 0:04.40/usr/sbin/diskarbitrationd 52?Ss 0:00.08/usr/sbin/memberd-x 53?Ss 0:02.80/usr/sbin/securityd 55?Ss 11:03.59/usr/sbin/notifyd 57?Ss 0:01.13/usr/sbin/DirectoryService.8051 p2 S+0:00.61 ssh rootbear 292 p3 S

8、s 0:00.02 bash 372 p3 S+0:00.42 ssh adminatuin 312 p4 Ss+0:00.03 bash 332 p5 Ss 0:00.03 bash 391 p5 S0:00.24/bin/bash9165 p5 S+0:00.50 emacs 352 p6 Ss 0:00.04 bash 476 p6 S0:01.04/bin/bash9299 p6 S0:00.09 xterm9319 p6 S0:00.07 xterm9423 p6 S0:00.14 ftp atuin9520 p6 R+0:00.01 ps-A9301 p7 Ss+0:00.01/u

9、sr/X11R6/bin/luit9302 p8 Ss+0:00.03 bash9321 p9 Ss+0:00.01/usr/X11R6/bin/luit9322 pa Ss+0:00.02 bash-A命令行选项与同时使用-a和-x选项等效,其中-a显示拥有控制终端的进程,-x显示没有控制终端的进程。在SVR4变种中,显示所有正在运行的进程(不论它是否拥有控制终端)的命令行选项是-e。从所显示的进程来看,它和BSD的-A选项是等价的。可以在清单4中看到输出的示例。清单4.SVR4环境中的进程列表$ps-e PID TTY TIME CMD 0?15:24 sched 1?0:00 init

10、2?0:00 pageout 3?0:00 fsflush 308?0:00 devfsadm 7?0:06 svc.star 9?0:10 svc.conf 506?0:00 htt_serv 260?0:00 rpcbind 259?0:00 cron 52?0:00 dhcpagen 282 console 0:00 ttymon 267?0:00 lockd 264?0:00 statd 90?0:00 sysevent.462?0:00 smcboot 464?0:00 smcboot 463?0:00 smcboot 473?0:00 htt 552?0:00 in.telne 5

11、27?0:00 dmispd 548?0:01 snmpd输出的区别在于所显示的信息列,但是可以通过指定所需要的列来进行修改。列出指定信息ps工具包含许多标准的显示列集。例如在SVR4中,经常使用ps-ef来获取关于列出进程的更详细的信息,包括父进程ID、处理器利用率、开始时间以及更详细的命令行,如清单5所示。清单5.扩展输出ps-ef UID PID PPID CSTIME TTY TIME CMD root 00 015:56:26?15:24 sched root 10 015:56:26?0:00/sbin/init root 20 015:56:26?0:00 pageout roo

12、t 30 015:56:26?0:00 fsflush root 308 10 15:57:09?0:00 devfsadmd root 71 015:56:29?0:06/lib/svc/bin/svc.startd.root 562 10 15:58:17?0:00/usr/lib/sendmail-bd-q15m root 576 555 116:01:47 pts/1 0:00 ps-ef root 416 10 15:57:14?0:00/usr/sbin/syslogd smmsp 561 10 15:58:17?0:00/usr/lib/sendmail-Ac-q15m.root

13、 552 283 015:57:47?0:00/usr/sbin/in.telnetd root 527 10 15:57:22?0:00/usr/lib/dmi/dmispd root 548 10 15:57:24?0:01/usr/sfw/sbin/snmpd对于BSD环境,通常添加-l选项,它为每个进程产生长输出,如清单6所示。清单6.在BSD中显示更详细的信息$ps-alUID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMAND 09165 391 031 057896 6376-S+p5 0:00.50 emacs501 3

14、52 349 031 027784 52-Ss p6 0:00.04 bash 0476 352 031 027784 600-S p6 0:01.05/bin/bash 09299 476 031 044988 1880-S p6 0:00.09 xterm 09319 476 031 044988 1888-S p6 0:00.07 xterm 09423 476 031 027504 488-S p6 0:00.15 ftp atuin 09540 476 031 027384 504-R+p6 0:00.01 ps-axl 09301 9299 031 027332 452-Ss+p7

15、 0:00.01/usr/X11R6/bin/luit 09302 9301 031 027784 888-Ss+p8 0:00.03 bash 09321 9319 031 027332 452-Ss+p9 0:00.01/usr/X11R6/bin/luit 09322 9321 031 027784 888-Ss+pa 0:00.02 bash这些选项存在的问题是,尽管它们显示了更多的信息,但这些信息并不总是特别有用,或者在寻找某个特定进程时包含了不希望看到的扰乱显示的信息。幸运的是,所有版本的ps还包括了指定要显示的列的功能。可以广泛地使用这种命令,不管是仅提取所需要的信息,还是在异类

16、环境中使用它来创造标准化的跨不同UNIX环境的输出。要使用这一特性,可使用-o命令行选项,并列出要显示的列,以逗号做列的分隔符。尽管可选择的列的范围有一些差别,但在不同的UNIX版本中,大部分列都是标准的。例如,所有变种中都有pid、ppid(父进程ID)、command、RSS(驻留集大小或内存使用情况)以及priority。使用时,可以用-o来选择列及其显示顺序。例如,要获取pid、ppid和commond,在BSD中可以使用-opid,ppid,command,如清单7所示,或者在SVR4中使用-opid,ppid,comm,如清单8所示。清单7.在BSD中选择特定的列$ps-o pid

17、,ppid,command PID PPID COMMAND 391 332/bin/bash9165 391 emacs清单8.在SVR4中选择特定的列$ps-opid,ppid,comm PID PPID COMMAND 555 552-sh 622 555 ps选择了想要的列后,可能会选择信息的排列顺序。ps的缺省设置是根据进程ID来排列进程列表,但是这样可能会隐藏正在查找的信息。当查找内存饥饿的进程时,按内存使用量来排列显示结果比按进程ID更加有用。有些ps变种通过使用命令行选项来支持这种情况。BSD变种中使用-m选项来按内存使用情况排序,或者使用-r来按CPU使用情况排序。许多SVR

18、4变种没有该问题的明确解决办法,但是可以在所有环境中通过将ps和sort进行组合来生成类似的结果。例如,要获取按CPU使用量排序的进程列表,可以在BSD中使用清单9所示的命令。清单9.在BSD中跟踪CPU使用情况$ps-A-o pid,%cpu,command|sort-n+1.358 0.1 ftp11425 0.1/bin/bash28684 0.3 trivial-rewrite-n rewrite-t unix-u 356 0.4 ssh 354 0.5 as23988 1.1 emacs 136 14.6 cc1plus26306 23.6 cpp在SVR4中,需要将%cpu改为pc

19、pu,而该命令在其他方面是相同的(请参见清单10)。清单10.在SVR4中跟踪CPU使用情况$ps-e-opid,pcpu,comm|sort-n+1.3 0.1 fsflush 555 0.1-sh 627 0.2 sort 628 0.2 ps该命令链是可行的,因为已经指定了进程列表的排列顺序,因此可以按照这些列进行排序以获取真正想要的信息。如果想使用不同的标准来查找进程,还有其他的可用方案。列出特定进程显然,在获取了正在运行的进程列表之后,也许希望列出特定的进程。一个显而易见的方法就是将ps的输出与grep结合起来,以提取所需的信息。在一些UNIX变种中,可以通过一些特定的实用程序来完成

20、这项工作,例如pgrep,但是如果要查找一些特定的命令,使用grep也同样是很有效的。$ps-ef|grep bash ps命令还支持根据更明确的标准来显示进程,例如用户ID、父进程或控制终端。例如,-U命令行选项限定了进程列表只显示指定用户名的进程。例如,要显示当前属于root用户的进程,请参阅清单11。清单11.根据用户列出进程$ps-U rootPID TTY TIME CMD 0?15:24 sched 1?0:00 init 2?0:00 pageout 3?0:02 fsflush 308?0:00 devfsadm 7?0:06 svc.star.552?0:00 in.teln

21、e 527?0:00 dmispd 629 pts/1 0:00 ps 548?0:01 snmpd要获取指定终端的所有进程,使用-t,如清单12所示。清单12.根据终端列出进程$ps-t 3PID TTY TIME CMD19915 pts/3 00:00:00 bash29145 pts/3 00:00:00 emacs32256 pts/3 00:00:00 emacs在有了这些信息后,也许想要用它来对进程进行相应的操作。向多个线程发送信号当找到了要查询的进程后,最常用的命令之一是kill。它向一个或多个进程发送特定的信号。对于启动了多个线程或子线程的守护进程的情况,可以尝试向父进程发送

22、信号,以此向所有的进程发送信号。然而,这种方法并不是对所有的守护进程和应用程序都有效。显然,您希望避免手动挑选出这些进程。有些UNIX变种中有一个名为pkill的工具,它能够向满足特定模式或其他标准的进程(例如终端、进程组、用户ID以及组ID列表)发送相同的信号。可以通过链接ps、grep、awk、xargs以及kill命令的方式来模拟这一基本操作,向满足特定命令模式的多个进程发送信号。例如,要向所有命令中包含 d的进程发送kill信号,可以使用:$ps-e-opid,command|grep d|awkprint|xargs kill-9如果对单个元素进行研究,将更容易理解它。$ps-e-o

23、pid,command该命令显示了所有正在运行的进程的列表(这是在SVR4系统中,而在BSD中则应使用-A)。它仅显示了进程ID和被执行的命令。不需要任何其他的信息,而且使用更详细的输出可能会引入其他方面符合搜索条件的文本。$ps-e-opid,command|grep d该命令仅提取了命令中含有 d的进程(因为进程列表中产生的唯一其他信息是进程ID):$ps-e-opid,command|grep d|awkprint通过使用awk,仅筛选除去打印输出中的第一个参数,即进程ID。$ps-e-opid,command|grep d|awkprint|xargs kill-9 xargs命令接收

24、空白字符分隔的项目列表(其中空白字符包括回车、换行、制表符以及一个或多个空格),并把它格式化为参数列表传递给指定的命令,在本示例中是kill命令。最好把它放进脚本程序中,并取一个适当的名字,例如(pkill或者killbyname)。可以设置该脚本接收两个参数,信号和匹配文本,甚至还可以考虑操作系统的差别,如清单13所示。清单13.通过命令字符串向进程发送消息#!/bin/sh HOSTTYPE=uname-sSIGNAL= STRING= if-z-o-zthen echo Usage:message signal string exit 1fi case$HOSTTYPE in Darwi

25、n|BSD)ps-a-opid,command|grep$STRING|awkprint;|xargs kill$SIGNAL;Linux|Solaris|AIX|HP-UX)ps-e-opid,command|grep$STRING|awkprint;|xargs kill$SIGNAL;esac这里所显示的基本技术可以用于其他类似的排序规则。计算内存使用情况ps工具还提供了我们目前尚未涉及的两个列。RSS列提供了进程的驻留集大小,这是该进程所使用的物理内存量,也是进程占用多少实际内存的指示。VSZ列详细列出进程正在使用的内存总量,包括所分配的内部存储,但通常已被交换到磁盘。对于大多数ps变

26、体而言,这两个列都是比较常用的。确定这两个数据能够更好地了解内存的使用情况。如果将ps与grep组合起来选择特定的进程,并使用awk来计算总量,就可以获取单个应用程序或者某个应用程序及其子进程正占用多少物理内存和虚拟内存。例如,要确定bash进程所使用的物理内存和虚拟内存,可以使用清单14中的命令。清单14.使用ps和awk计算内存使用情况$ps-A-o rss,vsz,command|grep bash|awkrss+=;vsz+=ENDprintReal:,rss,Virtual:,vszReal:4004 Virtual:305624这在诊断内存和交换区使用情况的问题时特别有用。使用与作

27、业控制兼容的Shell对于一个典型的系统管理员来说,在任一时刻运行一或两个以上的特定任务是很平常的事。尽管在任何时刻与服务器的连接可能不止一个,不论是多终端窗口(例如通过xterm)还是其他的终端,或者通过SSH、Telnet的远程连接,有时候需要在活动的Shell或者环境中控制或监视多个进程。所有的Shell都支持在命令的末尾附加连字符(&)来使命令自动在后台运行。但有时希望将一个交互应用程序(如一个编辑器)放到后台,以便可以运行一个Shell命令,然后返回到编辑器会话。这种控制后台进程的能力称为作业控制,它是Korn Shell、C Shell以及开源的Shell(例如bash和zsh)的

28、标准特性。为了实现在Shell中每次启动一个命令时在后台运行的基本作业控制,命令(可以是任何合法的命令行,甚至是内联脚本)给出了作业引用ID。$find/-namecore/tmp/corelist 2&1&311957可以使用jobs命令获取正在后台运行的作业列表,如清单15所示。清单15.使用jobs命令$jobs1-Stopped emacs MCSLP/Intranet/News.pm2+Stopped emacs MCSLP/Intranet/Media.pm3Running find/-namecore/tmp/corelist 2&1&在该清单中,第二个emacs命令使用了+号标

29、注。这表示Shell认为它是当前的活动作业。先前启动的find不是活动的工作,因为它不需要进行交互(尽管它产生输出,它并不需要输入来继续),因而不是活动的进程。第一个emacs进程使用了-标注,说明Shell认为它先前是活动的命令。可以分别使用%+和%-字符串来引用这些作业。可以通过在fg后输入作业编号或者作业字符串(%+、%-)来将任何正在运行的作业切换为前台进程。如果省略了引用,Shell就切换到当前的活动工作。要挂起当前运行的进程,按Control-Z。可以使用下面的代码进行重新配置:ftp3+Stopped ftp atuin它可以和许多不同的命令及应用程序一起使用。对于在Shell中

30、运行的大部分简单命令,如ls或者find,它也应该是有效的。请注意,该作业被标记为Stopped。这意味着已经暂停了该命令的执行。要将该命令切换为后台进程,使用bg命令。与fg一样,bg接受作业引用或者在不带参数时缺省为当前活动的作业作为其参数。如果该命令需要输入(如编辑器、FTP等),在bg命令之后再次按下回车时,会被警告该进程已暂时挂起(请参见清单16)。清单16.进程被暂时挂起的警告$bg3+ftp atuin&$3+Stopped请注意,如果后台命令产生了输出,并且没有将其重定向,那么即使通过作业控制将该命令放到后台,它依然会输出到屏幕。在一个繁忙的环境中,作业控制就成了管理和控制多个

31、后台作业,或者快速退出编辑器和其他命令并返回到活动Shell(相对与运行一个新的Shell)的最简便方法之一。在后台可靠地运行进程有时会想要在后台运行脚本、实用程序或命令行。然而,大部分系统在用户断开连接或注销时将终止在后台运行的命令,如果想要先登录,启动命令,然后再注销,这时会发现并不是想要的结果。如果需要重新启动,或者重新初始化后台或没有自动进行守护的守护进程,或者依赖于独立的脚本来开始和管理守护应用程序的执行,在这些情况下命令执行的终止是非常让人沮丧的。MySQL mysqld_safe脚本是一个很好的例子,它正是以这种方式进行工作的。要防止应用程序在您注销时自动终止,可以使用nohup

32、命令作为要运行的命令行或工具的前缀,如下所示:$nohup find/-name core除非专门为命令的输出进行重定向,否则nohup自动将标准输出和标准错误写入当前目录下名为nohup.out的文件中。使用标准重定向可以输出到自己的文件,但请记住,要同时重定向输出和错误流,例如:$nohup find/-name core/tmp/corefind.out 2&1我发现自己总是无意识地使用nohup来运行任何我认为持续时间将长于2、3分钟的命令,即使是在控制台中运行该命令。这可能在很大程度上和输出的自动重定向有关,而不是在连接失败时防止终止的能力。特别声明:1:资料来源于互联网,版权归属原作者2:资料内容属于网络意见,与本账号立场无关3:如有侵权,请告知,立即删除。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!