Chinaunix

标题: 如何从内核模块向用户程序发送信号 [打印本页]

作者: weily0000    时间: 2009-03-06 14:16
标题: 如何从内核模块向用户程序发送信号
刚查了下资料,说是kill_proc()之类的函数可以实现,以前没有接触过,有没有兄弟可以提示下,有相应的源码或者教程吗?
谢谢了
作者: scutan    时间: 2009-03-06 15:22
如下:

  1. #include <linux/signal.h>
  2. #include <linux/sched.h>

  3. kill_proc(processid, SIGINT, 1);
复制代码

就可以了.
作者: weily0000    时间: 2009-03-06 16:50
原帖由 scutan 于 2009-3-6 15:22 发表
如下:

#include
#include

kill_proc(processid, SIGINT, 1);

就可以了.


谢谢scutan老大,我现在想要做的就是一段内存缓冲区,如果存储满了,我需要以一定的方式通知用户进程读取这段数据,我想到的就是通过信号的方式通知,但是具体实现没什么概念,不知道可否详细点介绍
另外不知道是否还有其他比较好的方法没:)
作者: scutan    时间: 2009-03-06 16:51
原帖由 weily0000 于 2009-3-6 16:50 发表


谢谢scutan老大,我现在想要做的就是一段内存缓冲区,如果存储满了,我需要以一定的方式通知用户进程读取这段数据,我想到的就是通过信号的方式通知,但是具体实现没什么概念,不知道可否详细点介绍
另外 ...

>>一段内存缓冲区,如果存储满了

这段内存缓冲区是由其它的进程管理的? 还是你在内核中申请到的内存?
作者: weily0000    时间: 2009-03-06 17:48
原帖由 scutan 于 2009-3-6 16:51 发表

>>一段内存缓冲区,如果存储满了

这段内存缓冲区是由其它的进程管理的? 还是你在内核中申请到的内存?


我自己在内核中申请的。。
作者: springtty    时间: 2009-03-06 20:27
mark,学习
作者: weily0000    时间: 2009-03-06 21:04
原帖由 springtty 于 2009-3-6 20:27 发表
mark,学习


mark??这个可以实现吗?
刚google了下,mark貌似是个人。。
作者: scutan    时间: 2009-03-06 21:24
看看使用netlink的方法:
http://linux.chinaunix.net/bbs/v ... p%3Bfilter%3Ddigest
作者: weily0000    时间: 2009-03-06 22:34
原帖由 scutan 于 2009-3-6 21:24 发表
看看使用netlink的方法:
http://linux.chinaunix.net/bbs/v ... p%3Bfilter%3Ddigest


谢谢了,回去好好看看:)
作者: weily0000    时间: 2009-03-06 22:35
原帖由 springtty 于 2009-3-6 20:27 发表
mark,学习


呵呵,我知道mark是什么意思了
作者: emmoblin    时间: 2009-03-06 23:42
你这个最好的方法就是用netlink进行通信
作者: weily0000    时间: 2009-03-07 12:21
原帖由 emmoblin 于 2009-3-6 23:42 发表
你这个最好的方法就是用netlink进行通信


OK,谢谢了,我最近两天就准备学学这个了。。
作者: Godbach    时间: 2009-03-07 21:24
我现在想要做的就是一段内存缓冲区,如果存储满了,我需要以一定的方式通知用户进程读取这段数据,我想到的就是通过信号的方式通知,但是具体实现没什么概念,不知道可否详细点介绍


可以考虑使用内核和用户控件的异步通知机制。
作者: weily0000    时间: 2009-03-08 00:00
原帖由 Godbach 于 2009-3-7 21:24 发表


可以考虑使用内核和用户控件的异步通知机制。

这个可否具体点说呢??
作者: Godbach    时间: 2009-03-08 10:46
LZ看一下LDD3的第六章,高级字符设备驱动程序。
作者: weily0000    时间: 2009-03-08 10:58
原帖由 Godbach 于 2009-3-8 10:46 发表
LZ看一下LDD3的第六章,高级字符设备驱动程序。


恩,刚根据你说的关键字google了一下,好像我要做的这个功能有点像“信号驱动(SIGIO)的异步I/O”
综合楼上各位的指点,我要做的就是学习netlink实现通信问题,看看LDD3的高级字符驱动一章,利用它将信号传递到用户进程,对吧?
作者: scutan    时间: 2009-03-08 11:02
原帖由 weily0000 于 2009-3-8 10:58 发表


恩,刚根据你说的关键字google了一下,好像我要做的这个功能有点像“信号驱动(SIGIO)的异步I/O”
综合楼上各位的指点,我要做的就是学习netlink实现通信问题,看看LDD3的高级字符驱动一章,利用它将信号传 ...


嗯, 可以看看不同的方式. 看哪种是更适合你的需求的!
作者: Godbach    时间: 2009-03-08 11:19
原帖由 weily0000 于 2009-3-8 10:58 发表


恩,刚根据你说的关键字google了一下,好像我要做的这个功能有点像“信号驱动(SIGIO)的异步I/O”
综合楼上各位的指点,我要做的就是学习netlink实现通信问题,看看LDD3的高级字符驱动一章,利用它将信号传 ...


异步通知就是内核遇到对应的事件会通知应用层。
netlink也是一个好的方式,网络中用的比较多一些。
作者: weily0000    时间: 2009-03-08 11:28
原帖由 Godbach 于 2009-3-8 11:19 发表


异步通知就是内核遇到对应的事件会通知应用层。
netlink也是一个好的方式,网络中用的比较多一些。


那应用层做完了他做的可以通知内核吗?比如说它读完了缓冲区里面的数据
作者: Godbach    时间: 2009-03-08 12:56
原帖由 weily0000 于 2009-3-8 11:28 发表


那应用层做完了他做的可以通知内核吗?比如说它读完了缓冲区里面的数据


应该也可以通过这样的机制实现。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2