2009年5月11日星期一

(转载) Linux问答:如何消灭状态为D或Z的进程?

这篇文章转载自 :http://hutuworm.blogspot.com/2007/05/linuxdz-linux.html
Linux问答:如何消灭状态为D或Z的进程?
长期生活在 Linux 环境里,渐渐地就有一种环保意识油然而生。比如,我们会在登录提示里写上“悟空,我跟你说过叫你不要乱扔东西,乱扔东西是不对的。哎呀我话没说完你怎么把棍子扔掉了?月光宝盒是宝物,乱扔它会污染环境,要是砸到小朋友怎么办?就算砸不到小朋友,砸到了花花草草也不好嘛...”;在用户缺省目录里放一个题为 “自觉保护环境 请勿堆放垃圾”的空文件,并用 chattr +i 设为不可修改;看到垃圾文件就立即扫入 /tmp 目录,然后发广播通知垃圾制造者自己去 /tmp 认领,且警告其下不为例...我们深知,系统环境的整洁有利于系统管理员保持良好的心情、清晰的思路和稳定的工作状态。

有一类垃圾却并非 这么容易打扫,那就是我们常见的状态为 D (Uninterruptible sleep) ,以及状态为 Z (Zombie) 的垃圾进程。这些垃圾进程要么是求而不得,像怨妇一般等待资源(D),要么是僵而不死,像冤魂一样等待超度(Z),它们在 CPU run_queue 里滞留不去,把 Load Average 弄的老高老高,没看过我前一篇blog的国际友人还以为这儿民怨沸腾又出了什么大事呢。怎么办?开枪!kill -9!看你们走是不走。但这两种垃圾进程偏偏是刀枪不入的,不管换哪种枪法都杀不掉它们。无奈,只好reboot,像剿灭禽流感那样不分青红皂白地一律扑 杀!

悟空,我们所运维的可是24*7全天候对外部客户服务的系统,怎么能动不动就 reboot ?我们的考核指标可是4个9(99.99%,全年计划外当机时间不得超过52分钟34秒),又不是4个8,你稍微遇到点事就reboot,还要不要可用性了?再说,现在社会都开始奔和谐去了,我们对于 D 和 Z 这两种垃圾进程,也该尽可能采取慈悲手段,能解决其困难的,就创造条件,解决其实际困难,能消除其冤结的,就诵经烧纸,消除其前世冤结,具体问题应具体分析具 体解决,滥杀无辜只会导致冤冤相报因果循环...$^#$%#%^@#

贫僧还是回来说正题。怨妇 D,往往是由于 I/O 资源得不到满足,而引发等待,在内核源码 fs/proc/array.c 里,其文字定义为“ "D (disk sleep)", /* 2 */ ”(由此可知 D 原是Disk的打头字母),对应着 include/linux/sched.h 里的“ #define TASK_UNINTERRUPTIBLE 2 ”。举个例子,当 NFS 服务端关闭之时,若未事先 umount 相关目录,在 NFS 客户端执行 df 就会挂住整个登录会话,按 Ctrl+C 、Ctrl+Z 都无济于事。断开连接再登录,执行 ps axf 则看到刚才的 df 进程状态位已变成了 D ,kill -9 无法杀灭。正确的处理方式,是马上恢复 NFS 服务端,再度提供服务,刚才挂起的 df 进程发现了其苦苦等待的资源,便完成任务,自动消亡。若 NFS 服务端无法恢复服务,在 reboot 之前也应将 /etc/mtab 里的相关 NFS mount 项删除,以免 reboot 过程例行调用 netfs stop 时再次发生等待资源,导致系统重启过程挂起。

冤魂 Z 之所以杀不死,是因为它已经死了,否则怎么叫 Zombie(僵尸)呢?冤魂不散,自然是生前有结未解之故。在UNIX/Linux中,每个进程都有一个父进程,进程号叫PID(Process ID),相应地,父进程号就叫PPID(Parent PID)。当进程死亡时,它会自动关闭已打开的文件,舍弃已占用的内存、交换空间等等系统资源,然后向其父进程返回一个退出状态值,报告死讯。如果程序有 bug,就会在这最后一步出问题。儿子说我死了,老子却没听见,没有及时收棺入殓,儿子便成了僵尸。在UNIX/Linux中消灭僵尸的手段比较残忍,执行 ps axjf 找出僵尸进程的父进程号(PPID,第一列),先杀其父,然后再由进程天子 init(其PID为1,PPID为0) 来一起收拾父子僵尸,超度亡魂,往生极乐。注意,子进程变成僵尸只是碍眼而已,并不碍事,如果僵尸的父进程当前有要务在身,则千万不可贸然杀之。

这篇写出鬼气来了,就此打住。阿米豆腐,善哉善哉!

2009年4月28日星期二

2009年4月22日星期三

希望 SUN 一路走好

希望 SUN 一路走好....

2009年4月19日星期日

latex 配置备忘

安装 sudo apt-get install texlive-full cjk-latex-all (如果空间够,就全部安装了 :-) )

使用 gbkfonts 进行字体转换,供 latex 使用。
http://docs.huihoo.com/homepage/shredderyin/src/gbkfonts.gz
在用户主目录下建立texmf文件夹: mkdir ~/texmf
从windows 下拷贝 *.sim *.SIM 字体,位置为/usr/share/fonts/wins/
cd~/texmf
gbkfonts /usr/share/fonts/wins/SIMLI.TTF li
gbkfonts /usr/share/fonts/wins/simyou.ttf you
gbkfonts /usr/share/fonts/wins/simsun.ttc song
gbkfonts /usr/share/fonts/wins/simfang.ttf fs
gbkfonts /usr/share/fonts/wins/simkai.ttf kai
gbkfonts /usr/share/fonts/wins/simhei.ttf hei
mktexlsr

字体处理完之后,执行: sudo texhash

接着,修改/var/lib/texmf/web2c/updmap.cfg,在文件最后加上Map cjk.map(区分大小写),然后执行: sudo updmap

有任何改动,可以再用mktexlsr这个命令
tex系统中必须已经定义好这六种中文字体,且必须使用上面的名称。

转换编码:
linux下文本默认编码为utf8,要正常显示中文要转换为gbk编码:

iconv -f utf8 -t gbk 1.tex >2.tex

将1.tex文件内容从utf8(-f 参数表示源文件编码方式)编码转换到gbk(-t 参数表示目的文件的编码方式)编码,并重定向到2.tex,编译2.tex即可。

2009年4月15日星期三

slackware 12.2+kde4.2.2



kde 4.2.2 现在已经很好用了,我用了很长时间,只崩溃过一次。
openoffice 3.1 也非常好用,虽然是rc 版本,但是感觉很好,启动速度飞快,操作方便,是linux 下办公的不二选择。
我觉得gnome 现在已经进入了一个发展的滞留期,只能改善bug,和在美化上下点功夫,好像没有什么创新性的东西。kde 在运行稳定性方面做得是不如gnome,可能是kde 自带的东西太多了,依赖关系太复杂,所以容易崩溃。

2009年4月13日星期一

To you

So,be happy and go.
--------------------
农历三月十八

2009年4月10日星期五

幽城幻剑录

这个游戏的质量自然没得说,可难度也是惊人。
作为天地劫的续传,剧情上承前启后,是天地劫系列的巅峰之作。
如果你用心的去玩一遍,不要用修改器,也不看攻略,你就会体会到这个游戏的魅力。就像是一个远古忧伤的神话,朦胧但真实。生活中的许多无奈和伤感,会随着游戏而产生共鸣。在现实中无法圆满,游戏中亦难得团圆,人们不喜欢离别但总是喜欢回味离别。