/*

*功能:创建一个守护进程,监视系统所有运行的进程

*时间:2013.4.14

*/

#include

#include

#include

#include

#include

#include

#include

//创建一个守护进程

void init()

{

int pid;

int i;

struct rlimit rl; //获取进程资源西限制

if (getrlimit(RLIMIT_NOFILE, &rl) < 0) //获取进程最多文件数

printf(":can't get file limit");

if(pid = fork())

exit(0); //父进程,退出

else if(pid < 0) //开辟进程失败,退出并关闭所有进程

exit(1);

/* 子进程继续执行 */

setsid(); //创建新的会话组,子进程成为组长,并与控制终端分离

/* 防止子进程(组长)获取控制终端 */

if(pid = fork())

exit(0); //父进程,退出

else if(pid < 0)

exit(1); //开辟进程失败,退出并关闭所有进程

/* 第二子进程继续执行 , 第二子进程不再是会会话组组长*/

/* 关闭打开的文件描述符*/

if (rl.rlim_max == RLIM_INFINITY) //RLIM_INFINITY是一个无穷量的限制

rl.rlim_max = 1024;

for (i = 0; i < rl.rlim_max; i++)

close(i);

chdir("/tmp"); // 切换工作目录

umask(0); // 重设文件创建掩码

return;

}

int main()

{

FILE *fp;

FILE *fstream;

signal(SIGCHLD, SIG_IGN); // 忽略子进程结束信号,防止出现僵尸进程

init(); //初始化守护进程,就是创建一个守护进程

while(1)

{

/*PID 进程ID ,user:进程开辟用户,comm:进程名,lstart:进程开始时间,etime:进程持续时间*/

fstream=popen("ps -eo pid,user,comm,lstart,etime>test.txt","r");

//如果执行命令失败,则写入错误报告

if(fstream==NULL)

{

//在打开或者创建error.log成功的情况下,写入错误(使用errno时失败)

if((fp = fopen("error.log", "a+")) != NULL)

{

fprintf(fp, "%s\n", "执行命令失败");

fclose(fp);

}

else

exit(1); //写入错误失败,则终止程序推出并关闭所有进程

}

else

pclose(fstream); //关闭popen打开的I/O流

sleep(120); //设置成5分钟获取一次系统进程情况

}

return 0;

}

Linux守护进程编程编写,linux守护进程编程实例相关推荐

  1. 小何讲进程: 编写Linux守护进程方法详解

    守护进程概述 守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程. 它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些事件的发生. 守护进程常常在 ...

  2. linux更新驱动脚本,编写Linux驱动常见错误(不断更新)!

    工作中遇到的编写Linux驱动的常见错误和注意事项整理,将不断更新. 问题1.驱动的init函数声明错误 出错: [root@localhost]# insmod phyinfo.ko insmod: ...

  3. linux中利用脚本编写数组,shell脚本编程之数组

    bash仅支持一维数组,类型声明: declare -i    : 表示数值 declare -a  :表示普通数组(默认,可不用声明类型) declare -A :表示关联数组(必须声明类型,bas ...

  4. 自己编写linux系统,自己动手 编写Linux系统的设备驱动程序

    二 实例剖析 我们来写一个最简单的字符设备驱动程序.虽然它什么也不做,但是通过它可以了解Linux的设备驱动程序的工作原理.把下面的C代码输入机器,你就会获得一个真正的设备驱动程序.不过我的kerne ...

  5. linux 脚本在哪里编写,Linux 脚本编写基础(一)

    1. Linux脚本编写基础1.1语法基本介绍1.1.1开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使 ...

  6. linux运维脚本编写,Linux运维常用shell脚本实例 (转)

    1.用shell脚本批量建立Linux用户 实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码! #!/bin/bash for i ...

  7. linux终端程序如何编写,[LINUX]利用Ncursesw编写支持中文的终端程序

    1. Ncursesw库的安装与使用 Ncurses库的安装(Ubuntu): 查看相关软件包 sudo apt-cache search ncursesw 安装ncursew必须软件包 sudo a ...

  8. 易语言linux计时器,易语言编写linux程序

    易语言支持直接写linux程序在windows下调试,然后可以在linux在直接运行.这点觉得挺强的.不知道其它语言是不是也支持这样:在windows下编译,然后可以到linux下执行.虽然只是可以写 ...

  9. linux一键安装脚本编写,Linux中自动安装脚本

    如何让你的主机自动的完成安装,自动的回答系统提出的问题,编写自动安装脚本即可实现,如下将详细解释自动脚本安装方法. systemd-config-kickstart  ##自动应答脚本制作工具 安装成 ...

最新文章

  1. Nature Methods:Rob Knight发布Striped UniFrac算法轻松分析微生物组大数据
  2. Digital Image Processing 学习笔记3
  3. JavaScript test() 方法
  4. clickhouse常用sql
  5. [蓝桥杯]算法训练 The Red Button||codeforces 325E(哈密顿回路)
  6. CoreCRM 开发实录——开始之新项目的技术选择
  7. pow(x,n) leecode
  8. iOS多线程系列之GCD栅栏(barrier)实现同步锁
  9. 解析Pinterest:兴趣乐园背后的大文章
  10. 拓端tecdat|R语言highfrequency高频金融数据导入
  11. 直播视频网站源码,登录界面LoginActivity
  12. Java学习基础(三):Eclispe的简单安装及使用
  13. Hadoop上传和下载大存储的HIVE表
  14. OSPF开销值、协议优先级及计时器的修改
  15. Linux下如何查看硬盘型号、序列号、缓存 CPU 主板 等信息
  16. 光盘刻录 CD刻录软件 Ashampoo Burning Studio特别版 刻录CD就这么简单
  17. table总结insertRow、deleteRow
  18. MacBook常用快捷键
  19. 普华永道-开放数据资产估值白皮书,首创“数据势能”估值模型
  20. 加糖加冰加牛奶——装饰模式

热门文章

  1. 第一次执行时没有问题,重复执行会出错、GP循环
  2. python3抓取图片视频_Python opencv提取视频中的图片
  3. 最大公约数和最小公倍数问题(洛谷-P1029)
  4. 幂的末尾(信息学奥赛一本通-T1084)
  5. 信息学奥赛一本通C++语言——1077:统计满足条件的4位数
  6. 信息学奥赛一本通C++语言——1018: 其他数据类型存储空间大小
  7. 怎么判断两颗二叉树相等
  8. 45 MM配置-采购-条件-定价过程-定义定价计算方案
  9. python3 random模块_Python3 中 random模块
  10. 注解java_Java注解教程及自定义注解