免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2159 | 回复: 17
打印 上一主题 下一主题

请问如何让守护进程响应键盘事件(期待高手) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-11 15:45 |只看该作者 |正序浏览
大家好,我有个后台程序,需要知道用户的键盘事件,比如用户按了
F3键,后台程序就调用一个特定的程序。或者可以实现为键盘记录吧。

但是既然是守护进程,它必定已经脱离了终端,就不会和屏幕,键盘这些输入输出交互。
所以这是一个矛盾。

请大家出出主意,谢谢。

[ 本帖最后由 myvm 于 2006-10-12 14:10 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2006-10-14 10:40 |只看该作者
我觉得楼主可以换个思路,比如修改 shell 的代码,并替换掉原有的 shell。

论坛徽章:
0
17 [报告]
发表于 2006-10-14 10:33 |只看该作者
出现read error这种错误的原因是,当后台程序试图读控制终端时,会产生SIGTTIN的信号,所以会出现read错误。

我想对于后台程序而言,终端没有任何含义了!

具体的解决方法,我也没有找到,希望高手们指点下。

论坛徽章:
0
16 [报告]
发表于 2006-10-13 15:04 |只看该作者
我是直接运行./jianpan
然后在此终端直接输入的,提示read error,这时ps -aux ,TTY还是存在的,
而当我打开另一个虚拟终端,这时执行./jianpan的终端没有关闭,在新打开的虚拟终端输入时,执行程序的终端就没反映了,但是ps -aux ,jianpan程序的TTY还是存在的.
这个是不是因为服务器监控的虚拟终端输入端口不是一个?
而当我运行./jianpan &时,即使在同一个终端输入,也不会打印任何信息了.
这时运行ps -aux,程序jianpan的TTY还是存在的!

论坛徽章:
0
15 [报告]
发表于 2006-10-13 14:49 |只看该作者
因为那时候你还没有关闭你的虚拟终端,ps -aux时他的TT还是存在的
当你重新登陆一个终端,你ps -aux看看你的守护程序的TT是不是还存在呢???

你的那个程序里面,至少需要signal(SIGTTIN,SIG_IGN)去忽略后台程序试图读标准输入的信号,要不然,后台程序就会终止

论坛徽章:
0
14 [报告]
发表于 2006-10-13 14:33 |只看该作者
既然守护进程没有控制终端,那select为什么会监控到标准输入的变化呢?
系统在终端输入时的回显功能是怎么实现的呢?
谢谢!!

论坛徽章:
0
13 [报告]
发表于 2006-10-13 13:47 |只看该作者
守护程序(精灵程序)是没有控制终端的,read(STDIN_FILENO,buf,1024)也就没有意义了!

论坛徽章:
0
12 [报告]
发表于 2006-10-13 13:24 |只看该作者
我查了一下poll函数,是不是和select功能差不多呀?
read error 是我的程序打印出来的,也就是n<=0了,这和read函数又关系吗?是不是更本就没有数据可读或者是程序和标准输入接口的连接有问题?
不知道系统对标准输入的回显是怎么接收和处理的?
另外,怎么设置才能在read没有读到数据时阻塞呢?

对系统实现不太明白,还望大侠们多多指教!!

论坛徽章:
0
11 [报告]
发表于 2006-10-13 12:55 |只看该作者
你写的代码太乱了

[ 本帖最后由 zsniper 于 2006-10-13 12:58 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2006-10-13 12:47 |只看该作者
原帖由 john3851 于 2006-10-13 12:41 发表
read error 肯定是驱动有问题了,看看驱动程序的read函数,也可能你的驱动的poll函数没有写好,导致实际上没有数据可读但是也没有阻塞。



能不能说具体点?我对这方面不太懂,
你说的是系统的源码吗?
pool函数是干什么的?不好意思!

谢谢!!
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP