首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

关于进程终止状态的有关问题

2012-03-05 
关于进程终止状态的问题!在编写符合LSB规范的shell脚本时,要实现检查进程终止状态的功能。突然发现/etc/rc.

关于进程终止状态的问题!
在编写符合LSB规范的shell脚本时,要实现检查进程终止状态的功能。
突然发现/etc/rc.d/init.d/functions中的status()函数“依次”检查了进程的四种状态,查了些资料发现对这四种状态的解释为:
#   Status   has   a   slightly   different   for   the   status   command:
#   0   -   service   running
#   1   -   service   dead,   but   /var/run/   pid   file   exists
#   2   -   service   dead,   but   /var/lock/   lock   file   exists
#   3   -   service   not   running

我不明白第1和2种状态是什么意思,什么情况下会产生这中状态,产生这些状态意味着什么呢?这些和僵尸进程有关系吗?


还有一个问题:
有什么好办法判断一个服务没死,但停止对外服务了?


[解决办法]
帮顶
[解决办法]
1和2可能是进程被挂起,不再响应了。
1 的情况是为了保证进程只有一个实例,在启动的时候把进程的PID写到/var/run/pid_file里,
下次再启动的时候去读这个文件取得一个PID,然后与本进程PID比较,如果一样那么把它杀死,
或者自己退出。
2 的情况是进程使用了锁文件,这个时候进程可能进入了死锁状态,要由其它进程来kill掉。
[解决办法]
判断一个服务没死,但是停止对外服务了,这个要根据具体服务来定。

比如数据库可以采用检查进程在不在,然后连接,查询的方法。
对数据库执行一个select语句,看看是否有返回,如果有返回,说明服务正常对外服务,如果无,
那么说明服务停止对外服务了。但是这里也有一个问题,有的数据库对查询结果执行了缓冲,
你的select语句返回值有可能是从缓冲区返回的,而这时数据库已经停止对外服务了。

更好的一个方法是,在数据库里建一个特殊表,取你的系统当前时间,然后把这个时间insert到数据
库里,再把它给读出来,最后用读出来的时间与你前面取到的时间相比,如果一样,证明数据库
正常对外提供服务,如果不一样,这时问题就大了,说明数据库挂了。
[解决办法]
1. linux系统下的守护进程在结束后还是会保存该pid文件. 由于守护进程大多是服务程序, 拥有比较特殊的pid, 当重启守护进程时, 检查该pid文件, 并杀死pid文件中记录的pid进程, 实现重启.
2. 获得锁的情况下异常退出, 没有回收锁. 比如Ubuntu下的apt-get就会经常性的造成这种现象, 可能是程序的bug吧.

热点排行