Linux系统的进程管理 续

发表于:2007-05-26来源:作者:点击数: 标签:
另外一个有用的程序就是top。 这个程序和ps类似,但是通常会全屏显示,而且会随着进程状态的变化不断更新。对于那些经常引发问题,而用ps又难以查看的程序而言,这个命令是很有用的。整个系统的信息也会显示,这就为着手查找问题提供了便利。系统总共有多少C
另外一个有用的程序就是top。

这个程序和ps类似,但是通常会全屏显示,而且会随着进程状态的变化不断更新。对于那些经常引发问题,而用ps又难以查看的程序而言,这个命令是很有用的。整个系统的信息也会显示,这就为着手查找问题提供了便利。系统总共有多少CPU和内存资源以及负载平衡等信息本身就是很有用的,再加上程序列表以及程序当前的状态和各自的统计信息,你现在可以理解为什么top这么常用了。

不要忘了pstree
最后,另外一个可以快速简单查看进程的命令是pstree。这个命令会列出当前的进程以及它们的树结构。一个进程启动的时候可能会产生自己的一个子进程。运行pstree命令就可以很容易地看到这些信息。

  $ pstree -cp 125
  httpd(125)-+-httpd(126)
          |-httpd(127)
          | -httpd(129)
          `-httpd(130)

Httpd是个很好的例子,因为它会经常产生子进程。在上例中你可以看到PID为125的树。如果你想终止httpd但是又不想结束所有单个的子进程,那么找父进程。pstree命令可以列出所有单个进程对应的树或者系统中的所有进程。它不仅可以帮助你找到发生异常的进程,还可以作为一个学习工具。用户可以通过执行这些命令学到Linux的很多东西,还可以参考相关的帮助页。

管理进程
如果你学会了用ps和top这些命令监视进程,你还应该知道怎么管理进程。你可以用kill、killall和renice这些命令实现进程管理。

"kill"命令向正在运行的进程发送信号。最常见的应用就是用它来停止程序的执行。你首先要获得运行进程的PID(比如可以用ps aux命令),然后可以用如下命令终止进程:

  $ kill 125

  $ kill -9 125

通常情况下这个命令可以终止进程125。需要强调的是你要么是这个进程的属主,要么是根用户,否则不能终止这个进程。有时候单纯用一个kill命令并不能终止进程,你还需要以下操作:

如果进程挂起而且没有正常回应,那么可以用"-9"标志来结束这个进程,上例指明了这个过程。通常的kill命令是发送一个sigterm信号,而-9发送的是sigkill信号,这个信号强迫程序终止。其它一些信号可以用于终止或者启动进程。你可以运行"kill -l"命令,然后就可以看到这些内容。

Killall命令与kill命令很相似,但是接收不同的参数。你可以向它传送一个程序名而不是PID。以这个程序名运行的所有进程都会被终止。只要你是程序的属主或者是根用户那么就可以终止这个程序。所以运行killall tcpdump命令会终止所有tcpdump程序的实例。如果有很多进程以同样的名字运行,这一点是很有用的。

一定要注意你在终止什么进程,特别在你是根用户的时候。终止了不适当的进程可能终止你的会话甚至让整个系统都停止运行。你应该熟悉那些标准的运行进程以及它们的资源使用情况。如果想防止系统问题发生,最好设置一个基线。

还记不记得我先前提到可以改变进程的优先级?你可以用renice命令实现。改变优先级可以通知系统给某个进程更多或者更少的CPU时间。进程优先级("niceness")的范围从-20到20,-20是最高的优先级。所以如果想要减小httpd进程125的优先级,你可以运行下面的命令:

  $ renice +20 125

你可以通过改变优先级来节省系统资源。系统可以自动改变优先级,每当这种情况发生的时候,很可能意味着一个程序占用了比正常情况下更多的资源。

加速问题解决过程
能够监视和控制Linux系统中的进程是很必要的。ps、top、kill和renice这些程序可以让你看到进程的运行情况并且对它进行控制。你对每个进程了解得越多,就能够越容易地精确定位进程的问题所在。系统通常会因为某种原因遇到各种问题,比如速度变慢或者不稳定,而使用这些工具可以帮助你提高找到问题所在的能力。

原文转自:http://www.ltesting.net