Linux下编写守护进程

目录

 

一、要求

二、守护进程

1.概念

​​​

 2.编写

三、实现

四、源码

 


一、要求

在Linux系统下编写一个守护进程,该守护进程能够记录系统运行期间所有运行的进程。记录信息包括:进程PID,可执行程序名称,用户名,创建时间等。

二、守护进程

1.概念

 2.编写

三、实现

1.对于守护进程的编写,按照上述步骤即可以写出,不会太难。

2.要实现进程信息的记录,在终端中我们知道可以使用ps命令来查看进程信息,所以不妨考虑在C程序中执行shell命令来完成进程信息记录,正好可以使用system函数来执行shell命令。

3.但执行shell命令如何把终端中的输出信息给保存到文件中呢?于是又想到了重定向可以实现此功能,比如ps -aux >> log.txt命令就可以将进程信息保存到当前目录的log.txt文件中,会自动创建该文件

四、源码

注意:对于chdir()函数和system函数的说明:如果system函数中执行的shell命令重定向的位置没有使用绝对路径,则chdir中的路径最好是绝对路径,不然重定向可能会出错,因为可能找不到路径。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <time.h>
#include <syslog.h>
#include <stdbool.h>
 static bool flag = true;
int init_daemon(void) 
{ 
	int pid; 
	int i; 	
	pid = fork();
	//子进程pid为0
	if(pid > 0) {
		exit(0); //结束父进程,使得子进程成为后台进程
	}
	else if(pid < 0) { 
		return -1;
	}
	//建立一个新的进程组,在这个新的进程组中,子进程成为这个进程组的首进程,以使该进程脱离所有终端
	setsid(); 
	//改变工作目录,使得进程不与任何文件系统联系,使用绝对路径,以免开机自启后找不到文件路径
	chdir("/home/xinger/Documents/OS/守护进程/");
    //关闭所有从父进程继承的不再需要的文件描述符
	for(i=0;i< NOFILE;close(i++));
	//将文件当时创建屏蔽字设置为0
	umask(0);	
	return 0;
}
 
int main() 
{ 
	//创建守护进程
	init_daemon();
	system("echo 进程信息 >> log");
	while(flag) { 
		system("date >> log");//记录每次向log文件写入进程信息的时间
		system("ps -aux >> log");//写入进程信息
		sleep(20);
	} 	
    return 0;
}

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值