Maemo Linux手机平台系列分析:(14) Maemo平台开发之 设计D-Bus server时要注意的若干问题

本文分析了Maemo Linux手机平台上的D-Bus server开发,强调了服务器设计要点,包括精灵化、后台化操作,事件循环与电量管理,以及支持并行处理。文中提到避免长时间高频定时器,采用事件驱动模型处理多事件源,同时讨论了多线程和fork进程处理请求的优缺点,为开发者提供了宝贵的实践指导。
摘要由CSDN通过智能技术生成
 
 
设计 D-Bus server 时要注意的若干问题
 
  • Server的定义
  • 精灵化,后台化
  • 事件循环和电量消耗
  • 支持并行处理能力
  • 调试
Server 的定义
就软件而言, server 一般理解成:能为 client 提供服务的软件组件。在 Linux 中, server 一般是 daemon 的形式运行的。 Daemon 是一个术语: daemon 是同 terminal 剥离的这么一个进程,一般运行于后台,处理一些用户不需要看见的动作。
 
有时候,你可能会听见人们把 server 称作 engine Engine 是个更通用的一个术语, Engine 和如何实现一个服务没有太大的关系 (Engine 可以单独作为一个进程;可以作为一个库,由 client 直接调用 ) 。更广泛点讲: Engine 是应用程序的一部分,主要是实现部分功能,但不是 interface 。在 Model-View-Controller 模型中, Engine 相当于 Model
 
目前为止,我们的 server 程序并不是以 deamon 的形式运行的,主要是想在 terminal/ 屏幕上看到更多的打印信息。如果我们运行 server 程序时,加个参数: "--stay-on-foreground" , 这样,我们的 server 就不会被“精灵化”,而保持在前台运行。对于调试,这是非常重要的。
 
默认情况下,一个 server 程序被 daemonize 后,它的输入 / 输出文件就会关闭了,这时再从 terminal 读取用户输入,或者写数据到 terminal 都会失败 ( 包括 printf g_print)
 
Daemonization( 精灵化 )
把一个进程 process 转化为一个后台 daemon 的目的就是想把它同其父进程剥离开,并为它单独创建一个会话。这样剥离是有好处的: server 的父进程不会自动关闭 server 了。把一个 process 变成 daemon 的过程如下:
  • fork 一个新的子进程,原进程推出,子进程进入init process中;
  • setsid为子进程创建一个新的会话;
  • 从当前工作目录切换至root目录,因此daemon不会阻止文件系统的正常卸载;
  • daemon创建的目录和文件设置umask值,不如其他进程访问。在Internet Tablet产品中,没有这样做,因为只有一个用户;
  • 关闭所有的标准I/O文件描述符,为了在terminal关闭时不致于产生SIGPIPE信号给daemon并且把所有的stdin, stdout, stderr只想/dev/null,这样所有的打印将会丢失掉。
函数 daemon 可以让你切换目录并且关闭已经打开的文件描述符:
#ifndef NO_DAEMON
 
 /* This will attempt to daemonize this process. It will switch this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值