用killall -0监控服务的注意事项
2015-03-22 10:08
253 查看
后台服务需要不间断运行,意外退出后,需要将其重新拉起。常常可以通过向进程发送信号0,然后根据返回值来判断一个进程是否存在。比如进程名字为A,那么
exsit="killall -0 A;echo $?"
exsit为0就表示进程A存在,否则表示不存在。
然而,当有多个进程名字都是A的时候,只有在全部名字为A的进程都退出后,exsit才非0,所以这种监控方法并不太适合多进程环境(为了负载均衡,服务器常常采用多进程)。
我们来看例子。
1.启动父子总共5个进程。
2.发送killall -0
发现有进程接收了信号
3..杀掉一个子进程
注意此时这个子进程成了僵尸进程。虽然现在只有4个进程,但是killall -0发出的信号仍然被接收,所以返回0.再杀一个,只剩3个所以仍然又能进程接收相关信号,返回0.
4..killall杀掉所有的父子进程
此时没有进程接收信号,返回1.
exsit="killall -0 A;echo $?"
exsit为0就表示进程A存在,否则表示不存在。
然而,当有多个进程名字都是A的时候,只有在全部名字为A的进程都退出后,exsit才非0,所以这种监控方法并不太适合多进程环境(为了负载均衡,服务器常常采用多进程)。
我们来看例子。
#include<iostream> #include<sstream> #include<string> #include<sys/shm.h> #include<sys/socket.h> #include<sys/wait.h> #include<sys/time.h> #include<fcntl.h> #include<time.h> #include<unistd.h> #include<sys/file.h> #include<signal.h> #include<vector> using namespace std; void sum_test() { int curpid=getpid(); cout<<"summer "<<curpid<<" start......."<<endl; sleep(600); } int main() { cout<<"Start....."<<endl; //////创建累加子进程 vector<pid_t> vsumprocess; uint32_t sumprocessnum=4; for(int i=0;i<sumprocessnum;++i) { pid_t pid = fork(); if(pid<0) { cout<<"failed to create process"<<endl; } else if(0==pid) { sum_test(); return 0; } vsumprocess.push_back(pid); } ////等待累加进程结束 for(vector<pid_t>::iterator iter=vsumprocess.begin();iter!=vsumprocess.end();iter++) { pid_t pid=waitpid(*iter,NULL,0); cout<<"sum child process "<<pid<<" over"<<endl; } }然后我们运行他。
1.启动父子总共5个进程。
2.发送killall -0
发现有进程接收了信号
3..杀掉一个子进程
注意此时这个子进程成了僵尸进程。虽然现在只有4个进程,但是killall -0发出的信号仍然被接收,所以返回0.再杀一个,只剩3个所以仍然又能进程接收相关信号,返回0.
4..killall杀掉所有的父子进程
此时没有进程接收信号,返回1.
相关文章推荐
- 【Redis笔记】 第5篇: redis监控工具-redis sentinel使用说明及注意事项
- MongoDB Windows安装服务方法与注意事项
- MongoDB安装为Windows服务方法与注意事项
- Android 服务(Service)几点注意事项
- Linux操作系统下NTP服务的配置注意事项
- C# 中如何操作系统服务?注意事项有哪些?给出代码片段!(图)
- 微服务的注意事项
- MongoDB安装为Windows服务方法与注意事项
- [开发笔记]-Windows Service服务相关注意事项
- 腾讯地图开放平台定位服务使用注意事项
- 【Redis笔记】 第5篇: redis监控工具-redis sentinel使用说明及注意事项
- Android 绑定类型服务---其他注意事项
- 数据访问更新服务在生产环境部署注意事项
- MongoDB安装为Windows服务方法与注意事项
- hadoop中启动服务时的注意事项(备忘)
- Windows Azure服务购买,收费,使用注意事项及学习资料推荐
- 使用云端服务注意事项说明
- Windows服务使用注意事项
- 移动游戏中发短信收费(增值服务)的注意事项
- RHEL4- ssh服务(十三)ssh文章系列总结及ssh防范之DenyHosts的注意事项