手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

如何自动杀死UNIX僵死的进程

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
人保系统的电脑应用,已从单机运行方式过渡到以公司为中央的集中处理方式,各县级支公司通过广域网、远程telnet登录到市公司主机。由于网络的原因,有些进程会突然僵死。这些僵死的进程,会消耗系统大量的资源,直接影响机器的正常运行。为了实时地、自动地杀死这些僵死的进程,本人编写了 Shell程式Autokill。

  Autokill程式脚本
  #

  # autokill

  #

  ps -ef | awk ‘{ print $1,$2,$7,$8 }‘ |

   awk ‘/[0-9][0-9]:[0-9][0-9]:[1-9][0-9]/ { print $1,$2,$3,$4 }‘ |

   awk ‘!/root/ { print "kill -9 " $2}‘ > /tmp/k_kill

  chmod 777 /tmp/k_kill

  /tmp/k_kill

  Autokill程式解释
  首先,用UNIX 命令 ps -ef 查看进程状态,通过管道传送给 awk 进行处理。

  在第一个 awk 中,获取进程的用户标识(UID)、进程号(PID)、进程占用CPU时间(Time)、进程执行命令(CMD)四个字段的值。

  在第二个awk 中,通过模式匹配,选取任何匹配模式的行。在awk 中,[0-9]匹配0~9中任一个数字,[1-9]匹配1~9中任何一个数字,连用两个[0-9][0-9]则匹配一个任意两位数,因此[0-9][0-9]:[0-9][0-9]:[1-9][0-9]则匹配 Time时间字段值,查找占用 CPU 时间超过 10 秒的进程;假如要查找占用 CPU 时间超过半小时的进程,则把模式改成 [0-9][0-9]:[3-9][0-9]:[0-9][0-9]。

  在第三个 awk 中,用 “!/root/ ”过滤掉由 Root用户生成的进程,并进行Shell语言拼装,并将最终结果定向到文档 /tmp/k_kill。在 /tmp/k_kill 文档中,都是形如 kill -9 123 的Shell命令。

  在Autokill程式的最后,执行 /tmp/k_kill 杀死进程。

  查看中间结果
  Autokill程式采用了管道处理方式,如要查看中间结果,则能够依次断开管道。

  第一步执行:ps -ef

  第二步执行:ps -ef | awk ‘{ print $1,$2,$7,$8 }‘

  第三步执行:ps -ef | awk ‘{ print $1,$2,$7,$8 }‘ |

   awk ‘/[0-9][0-9]:[0-9][0-9]:[1-9][0-9]/ { print $1,$2,$3,$4 }‘

  第四步执行:ps -ef | awk ‘{ print $1,$2,$7,$8 }‘ |

   awk ‘/[0-9][0-9]:[0-9][0-9]:[1-9][0-9]/ { print $1,$2,$3,$4 }‘ |

   awk ‘!/root/ { print "kill -9 " $2}‘ > /tmp/k_kill


  最终查看 /tmp/k_kill 文档。

  再有,如只想自动杀死由某一用户执行的进程(如jdc3206),只要将模式“!/root/”改成 “/jdc3206/”即可;如只想杀死执行某一命令的进程(如 xinmu ),只要将模式“!/root/” 改成“/xinmu/”即可。

  最后用 crontab -e 增加一个 cron 作业。

  0,30 * * * * /tmp/autokill

  Kill命令失灵怎么办
  经过以上步骤,系统每隔半小时执行一次/tmp/autokill。但在UNIX系统中,有些僵死的进程会莫名其妙地不能用 Kill 命令杀死,这就需要重新引导机器,一方面清除系统垃圾,另一方面需要对资源重新分配。采用中央运行模式,机器不能随意开关机,总要等到夜晚没有用户使用机器时,才能重新开关机。为此编写一个Shell程式,让机器自动开关机。以下是Autoreboot 程式脚本。

  #

  # autoreboot

  #

  PATH=/bin:/etc:/usr/bin:/tcb/bin:/usr/informix/bin

  INFORMIXDIR=/usr/informix

  INFORMIXSERVER=da3206a

  ONCONFIG=onconfig.yca

  export PATH INFORMIXDIR INFORMIXSERVER ONCONFIG

  onmode -ky

  sync

  sync

  reboot

  Autoreboot程式前 5 行,是配置 Informix系统环境,命令 onmode -ky 是关闭 Informix Online数据库,命令 sync 是UNIX 文档系统终极块回写,命令 reboot 是UNIX 系统中的系统重新启动命令。

  用 crontab -e 命令,增加一行 cron 作业30 6 * * * /tmp/auto_boot。

  该命令使系统每天6:30 重新开关机。假如使用的是双机系统,则要在两台机器上,都要进行重新开关机,时间定成一致。
  



文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS