什么是udev?
udev是设备管理工具
,udev以守护进程
的方式运行,通过监听内核发来的事件来管理etc/dev下面的设备文件。udev运行在用户态
,能够根据系统中设备的状态动态更新设备文件
一、什么是守护进程?
Linux daemon(守护进程)是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或者事件,不需要用户输入。常见地守护进程:系统日志 syslogd
,web服务器httpd
,邮件服务器sendmail
和数据库服务器mysqld
,守护进程通常以d
结尾。
udev守护进程:能够根据系统中设备的状态动态更新设备文件。
守护进程的特点
1.生存周期长
,随操作系统的启动而启动,关闭而关闭。
2.与终端无关
。终端的关闭不会影响守护进程的退出。
3.守护进程运行在后台
,不占用终端,终端可以执行其他命令。
4.守护进程是孤儿进程
,由init进程收养。
守护进程的开机自启动:
1. sudo vi etc/rc.local
2 .在rc.local里面加入守护进程可执行文件的路径
3.重启系统
守护进程与后台进程的区别?
1.守护进程与终端无关,后台进程与终端挂钩,要往终端输入或输出
2.守护进程关闭终端不受影响,守护进程随终端的关闭而退出。
二、编写守护进程的程序
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include<stdbool.h>
static bool flag = true;
void handler(int);
void handler(int sig)
{
printf("I got a signal %d\nI'm quitting.\n", sig);
flag = false;
}
int judement()//判断可执行程序是否在运行
{
FILE *fp;
char readbuf[128]={'\0'};
char* cmd="ps -elf |grep xxx文件名 |grep -v grep";
fp=oppen(cmd,"r");
fread(readbuf,128,1,fp);
if(strstr(readbuf,"xxx文件名")!=NULL)
return 0;
else
return -1;
}
int main()
{
time_t t;
int fd;
if(-1 == daemon(0, 0))//创建后台进程
{
printf("daemon error\n");
exit(1);
}
//设置信号处理函数
struct sigaction act;
act.sa_handler = handler;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if(sigaction(SIGQUIT, &act, NULL))
{
printf("sigaction error.\n");
exit(0);
}
//进程工作内容
while(flag)
{
if(judement()==-1){//调用函数判断想执行的文件是否在运行,-1没有运行,0在运行
systrm("可执行文件的名字 &");//没有执行,调用system函数和&在后台运行
}
return 0;
}