» «

RSS订阅


    抓虾    pageflakes
    Rojo    google reader
    netvibes    my yahoo
    newsgator    blogdtnes
    鲜果    哪吒
    有道

自己动手提高ubuntu系统的性能

来源: LUPA开源社区
发布时间: 2007-05-10 10:34 作者: 风雷 来源: 风雷的技术天地 版权申明

字体: | 上一篇 下一篇 | 打印


文章来源于http://www.lupaworld.com

进程操作进阶

  当然,仅仅了解上面的知识,对于对进程的理解,还是不够的。下面,我会介绍更多的关于进程的知识。

  首先,我们需要知道,并不是所有的进程都会被动态分配PID,至少有两个进程不会,就是kernel和init。kernel进程的PID是0, 一直是0,而且你无法从ps,top这些命令中看见它,当然,也无法用kill命令来终止它。init进程是主父进程,什么意思呢?每一个进程都需要一个 父进程来监管它,父进程的作用就是接受子进程的返回值和状态值。而如果任何一个进程的父进程被终止,init就会成为它的父进程。init进程的PID固 定是1,从理论上讲,你也可以终止它,但是千万不要试图这样做,因为它是用来清除呆死进程的,一旦将其kill,系统最终将崩溃。

  除了他俩,还有一些进程是你不应该kill的,包括Zombies,/O Bound—A和Interception。事实上,我们很少解除这几个进程,普通用户也没必要接触它们,因此,在这里我不会详细解释它们的用途,有兴趣的朋友可以自己google。

  其它进程,在保证系统本身不崩溃的情况下,一旦有异常你都可以试图去kill,不过要知道,kill命令只作用一次,也就是说,假如,我是说假如, 这个进程在被kill后又重新自启动,那么你不得不再运行一次kill,这样循环。当然,此时,你就不能一直陪它kill下去了,追踪查看其自启动的根源 才是正确的做法。你觉得这太麻烦了?好吧,还有一个懒办法,就是看看这个进程的名字,然后用kill name来阻止它。我知道很多地方都有介绍kill -9 -1这个命令,但是你需要知道,这个命令会kill你所有的进程,包括界面进程以及终端。而且如果你是root权限……它会连所有系统应用都一起 kill,然后,你的系统就将崩溃。所以用这个命令,你还不如直接按下你的重新启动按键,还更加省心……

进程的启动

  我们能够查看正在运行的进程,查看进程的具体信息,但是,我们能不能知道它们是怎样开始的?难道是和孙猴子一样从石头里面崩出来的?你也许会看它的 PPID,恭喜你,摸着点门道了,but……你会发现大多数进程的PPID都是1,init进程。而事实上,进程的启动原因可能是很多种,启动脚本,设备 配置脚本,网络变化,甚至是任务日程等等等等。因此,我们需要探查进程启动的秘密。

启动脚本

  看看你的/etc/init.d/文件夹,你会发现其中包含了很多用于启动和停止系统服务的脚本,而它们,都将以链接形式存在于/etc/rc0.d, /etc/rc1.d以及类似目录中。例如,在/etc/rc1.d执行命令ls -l,你会看见如下结果:

lrwxrwxrwx 1 root root 13 2007-04-21 22:01 K01gdm -> ../init.d/gdm*
lrwxrwxrwx 1 root root 17 2007-04-21 21:59 K01usplash -> ../init.d/usplash*
lrwxrwxrwx 1 root root 17 2007-04-23 14:54 K09apache2 -> ../init.d/apache2*
lrwxrwxrwx 1 root root 17 2007-04-21 21:58 K11anacron -> ../init.d/anacron*
lrwxrwxrwx 1 root root 13 2007-04-21 21:58 K11atd -> ../init.d/atd*
lrwxrwxrwx 1 root root 14 2007-04-21 21:58 K11cron -> ../init.d/cron*
lrwxrwxrwx 1 root root 16 2007-04-21 21:59 K19cupsys -> ../init.d/cupsys*
lrwxrwxrwx 1 root root 15 2007-04-21 21:59 K19hplip -> ../init.d/hplip*
lrwxrwxrwx 1 root root 22 2007-04-21 21:58 K20acpi-support -> ../init.d/acpi-su
……………………………..

  如果你的运行级别是1,init就会进入/etc/rc1.d并调用其中的链接符号,也就是启动相应的进程,以此类推。如果想知道目前系统的运行级别,最简单的办法就是用who -r命令,会显示:

run-level 2 2007-05-04 10:09

  这就表示我目前的系统运行级别是2。在boot的时候,所有/etc/rc2.d目录下对应的init脚本的输出都会存到/var/log/messages这个文件中,你可以根据它来判断哪些进程被执行了。

启动设备

  udev进程用于动态管理设备的配置,这个进程监视和管理即插即用设备。一旦这些设备生效,存在于/etc/udev/rules.d/文件夹下的哪些脚本就会生效,调用不同的应用程序。

shell启动脚本

  每当你登入登出系统,或者是启动了一个新的shell之后,都会执行配置脚本,每一个脚本都会启动进程。对于笔者使用的ubuntu而言,默认的shell是bash,相应的配置脚本如下:

/etc/profile:每次登录shel都会执行,全局配置文件
$HOME/.bash_profile:基于用户自定义,每一个用户都可以有自己的登录脚本
/etc/bash.bashrc:交互式非登录全局配置脚本,这个文件在.bashrc中会调用
$HOME/.bashrc:交互式非登录用户自定义的配置脚本,也是我们大多数时候需要修改的文件
/etc/bash.logout:不一定存在,如果存在的话,每次用户登出时调用它
$HOME/.bash_logout:同上,只不过是用户自定义的

  我们可以注意到,上面这些脚本大致可以分为两类,一类是用于登入登出的,一类是交互式。它们有什么区别么?简单得说,每当你登入你的系统时,登入脚本和交互式脚本都会执行。而当你打开一个终端窗口时,只有交互式脚本才会被执行。

桌面脚本

  linux喊了一万年的要易用,要占领桌面系统,简单说来,就是希望有一个漂亮易用的图形界面。大多数人的大多数应用还是基于图形界面的,因此,除了上面介绍的shell脚本,我们还应该关注一下图形界面脚本。

  在启动图形界面的时候,首先会运行/etc/X11/xinit/xinitrc, /etc/X11/Xsession和/etc/X11/xinit/xserverrc这三个脚本。它们会设置相应的环境变量,并在最开始启动时运行应 用程序。在X-Windows启动完毕之后,就是Gnome的启动,它会调用很多程序,产生很多进程,也就是类似于Windwos下的开机自启动程序。到 底是哪些进程呢?我们可以从存放系统级别启动脚本的/etc/X11/gdm/目录,用于用户自定义启动程序的$HOME/.gnomerc文件,或者通 过系统>首选项>会话菜单来查看:

screeshot

(点击缩放)

文章来源于http://www.lupaworld.com

声明:LUPA开源社区刊登此文只为传递信息,并不表示赞同或者反对。
62/6<123456>

查看全部评论(2) 最新评论


查看全部评论(2)我来说两句 直接向LUPA提出您的宝贵建议

-5 -3 -1 - +1 +3 +5