Linux热插拔udev机制


什么是udev?

udev是设备管理工具,udev以守护进程的方式运行,通过监听内核发来的事件来管理etc/dev下面的设备文件。udev运行在用户态,能够根据系统中设备的状态动态更新设备文件

一、什么是守护进程?

Linux daemon(守护进程)是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或者事件,不需要用户输入。常见地守护进程:系统日志 syslogdweb服务器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;
}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将可移动设备连入系统,系统的后台中会依次发生如下事件: l 内核检测到新硬件插入,然后分别通知hotplug和udev。前者用来装入相应的内核模块(如usb-storage),而后者用来在/dev中创建相应的设备节点(如/dev/sda1)。 l udev创建了相应的设备节点之后,会将这一消息通知hal的守护程序(hald)。当然udev还得保证新创建的设备节点可以被普通用户访问。 l hotplug装入了相应的内核模块之后,会把这一消息通知给hald。 l hald在受到hotplug和udev发出的消息之后,认为新硬件已经正式被系统认可了。此它会通过一系列精心编写的规则文件(就是传说中的xxx-policy.fdi),把发现新硬件的消息通过dbus发送出去,同还会调用update-fstab或fstab-sync来更新/etc/fstab,为相应的设备节点创建适合的挂载点。 l 卷管理器会监听dbus中发现新硬件的消息。根据所插入的硬件(区分U盘和数码相机等)不同,卷管理器会先将相应的设备节点挂载到hald创建的挂载点上,然后再打开不同的应用程序。 当然,如果是在CDROM中插入光盘,过程可能比较简单。因为CDROM本身就是一个固定的硬件,无需hotplug和udev的协助: l hald会自己监视CDROM,并且将光盘托架开合的消息通过dbus发出去。 l 卷管理器负责检查CDROM中的盘片内容,进行挂载,并调用合适的应用程序。 要注意,hald的工作是从上游得到硬件就绪的消息,然后将这个消息转发到dbus中。尽管它会调用程序来更新fstab,但实际上它自己并不执行挂载的工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值