在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 2132|回复: 1

守护进程在嵌入式Linux系统中的使用

[复制链接]
发表于 2007-8-8 11:51:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
引言:
在嵌入式Linux系统中,因为经常会碰到要让一些应用(进程)在启动的时候就执行,并且永远执行到系统结束为止的问题,所以,对一个合格的嵌入式Linux工程师而言,必须学会守护进程的编写。

由来:
在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会被自动关闭。但是守护进程却能够突破这种限制,它从被执行开始运转,直到整个系统关闭才会退出。如果想让某个进程不因为用户或终端或其他的变化而受到影响,就必须把这个进程变成一个守护进程。

编写步骤:
–创建子进程,父进程退出
–在子进程中创建新会话
–改变当前目录为根目录
–重设文件权限掩码
–关闭文件描述符


原理分析:
由于守护进程是脱离控制终端的,因此,完成第一步后就会在Shell终端里造成一程序已经运行完毕的假象。之后的所有后续工作都在子进程中完成,而用户在Shell终端里则可以执行其他的命令,从而在形式上做到了与控制终端的脱离
由于父进程已经先于子进程退出,会造成子进程没有父进程,从而变成一个孤儿进程。在Linux中,每当系统发现一个孤儿进程,就会自动由1号进程(也就是init进程)收养它,这样,原先的子进程就会变成init进程的子进程了/*父进程退出*/
pid=fork();
 if(pid>0){
  exit(0);
}


[ 本帖最后由 caohejing 于 2007-8-8 12:11 编辑 ]
 楼主| 发表于 2007-8-8 12:13:56 | 显示全部楼层

守护进程在嵌入式Linux系统中的使用(二)

我们做了一个示范的例子,下面解释一下例子中用到的概念:
进程组:
–进程组是一个或多个进程的集合。进程组由进程组ID来唯一标识。除了进程号(PID)之外,进程组ID也一个进程的必备属性之一。
–每个进程组都有一个组长进程,其组长进程的进程号等于进程组ID。且该进程ID不会因为组长进程的退出而影响。
会话期:
–会话组是一个或多个进程组的集合
–通常,一个会话开始于用户登录,终止于用户退出,在此期间该用户运行的所有进程都属于这个会话期
setsid函数作用
–setsid函数用于创建一个新的会话,并自任该会话组的组长
–让进程摆脱原会话的控制
–让进程摆脱原进程组的控制
–让进程摆脱原控制终端的控制
由于调用fork函数时,子进程全盘拷贝了父进程的进会话期、进程组、控制终端等,虽然之后父进程退出了,但原先的会话期、进程组、控制终端等并没有改变,因此,还没有真正意义上独立开来,而setsid函数能够使进程完全独立出来,从而脱离所有其他进程的控制。
代码中其他部分的解释:
同文件权限掩码一样,用fork新建的子进程会从父进程那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读或写,但它们一样消耗系统资源,而且可能导致所在的文件系统无法卸下
在上面的第二步后,守护进程已经与所属的控制终端失去了联系。因此从终端输入的字符不可能达到守护进程,守护进程中用常规的方法(如printf)输出的字符也不可能在终端上显示出来。所以,文件描述符为0、1和2的三个文件(常说的输入、输出和报错这三个文件)已经失去了存在的价值,也应被关闭
for(i=0;i<MAXFILE;i++)
close(i);

本文中提到的代码可以到以下地址下载。
http://www.caohejing-training.com/Soft/SoftShow.Asp?SoftID=2
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-29 06:53 , Processed in 0.021244 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表