博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux 守护进程
阅读量:6452 次
发布时间:2019-06-23

本文共 2462 字,大约阅读时间需要 8 分钟。

hot3.png

1.守护进程只能存在一个;

2.由守护进程拉起服务程序,并wait;

3.当服务程序进程退出时,守护进程再次拉起服务程序,如此反复;

代码如下:

#include
#include
#include
#include
#include
#define RUN_APP_PATH "./a.out"#define PARA_0 "start"#define PARA_1 ""#define SELF_APP_NAME "pup_daemon"int getProcessRunningCount(const char * pName){ FILE* fp = 0; int iCount = -1; char buf[1024] = {0}; char command[1024] = {0}; if(0 == pName) return -1; sprintf(command, "ps -C %s|wc -l", pName ); if((fp = popen(command,"r")) == NULL) { printf("[getProcessRunningCount] popen error ...... \r\n"); return -1; } if( (fgets(buf, 1024, fp)) != NULL ) { iCount = atoi(buf); } pclose(fp); return iCount;}int runDaemon(){ int iRunningCount = getProcessRunningCount(SELF_APP_NAME); printf("Running count is %d ... \r\n", iRunningCount); if(0 > iRunningCount) { printf("[getProcessRunningCount] err ... \r\n"); return 0; } if(2 < iRunningCount) { printf("App is already running ... \r\n"); return 0; } pid_t pid = -1; while(1) { pid = fork(); if (pid < 0) { fprintf(stderr, "error!"); usleep(1000 * 1000); continue; } else if( 0 == pid ) { if( 0 > execl(RUN_APP_PATH, PARA_0, PARA_1, (char*)0) ) { printf("execl err \r\n"); } printf("This is the child process! \r\n "); return 0; } else { printf("This is the parent process! child process id = %d \r\n", pid); } wait(0); usleep(1000 * 3000); } return 0;}int main(int argc, char ** argv ){ for(int i = 0; i < argc; ++i) { printf("para is %s \r\n", argv[i]); } runDaemon(); return 0;}

转载于:https://my.oschina.net/u/262868/blog/153049

你可能感兴趣的文章
nodejs链接mongodb数据库
查看>>
新工作的这一个月
查看>>
RAID损坏后 对数据的完整备份
查看>>
参考文献规范格式
查看>>
物联网未来趋势:边缘计算正渐渐兴起
查看>>
error recoder,error debug for openStack kilo
查看>>
聚类算法概述
查看>>
Windows Server 2012正式版RDS系列⑿
查看>>
CentOS ips bonding
查看>>
Active Defense Harbinger Distribution
查看>>
ASP.NET MVC Framework 动态汇集
查看>>
个人拙见之1-- NAS、CIFS、NFS之间的关系
查看>>
Android:Context上下文菜单、ContextMenu
查看>>
Tokyo Tyrant性能优化策略
查看>>
继承与派生(二)
查看>>
Nagios整合cacti部署详解
查看>>
Windows变慢原因分析
查看>>
Vbs获取两个日期天数间隔
查看>>
c/c++通用内存泄漏检测框架GMFD(General Memory Fault Detection Framework)
查看>>
Citrix小贴纸--PVS差异vDisk.
查看>>