免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 蓝色键盘
打印 上一主题 下一主题

在unix系统中创建守护进程 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2003-05-08 07:57 |只看该作者

在unix系统中创建守护进程

原帖由 "nile" 发表:
还有, 关闭 fd0,1,2是必须的吗?

必须关闭stdin,stdout,stderr。这三个文件描述符都是和终端相关的,脱离终端后,它们都不知道指向什么地方了。

论坛徽章:
0
12 [报告]
发表于 2003-05-08 08:57 |只看该作者

在unix系统中创建守护进程

不会的。 会交给 init 进程。 ppid = 1

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
13 [报告]
发表于 2003-05-08 08:59 |只看该作者

在unix系统中创建守护进程

2、脱离控制终端,登录会话和进程组

  登录会话可以包含多个进程组,这些进程组共享一个控制终端,这个控制终端通常是创建进程的登录终端、控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。

  其方法是在第一点的基础上,调用setsid()使进程成为会话组长:

  需要说明的是,当进程是会话组长时,setsid()调用会失败,但第一点已经保证进程不是会话组长。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离,由于会话过程对控制终端的独占性,进程同时与控制终端脱离。
  具体是操作就是:
  (a )成为新对话期的首进程
  (b )成为一个新进程组的首进程
  (c )没有控制终端。

  3、禁止进程重新打开控制终端

  现在,进程已经成为无终端的会话组长,但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端:

  4、关闭打开的文件描述符

  进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在地文件系统无法卸下以及无法预料的错误。一般来说,必要的是关闭0、1、2三个文件描述符,即标准输入、标准输出、标准错误。因为我们一般希望守护进程自己有一套信息输出、输入的体系,而不是把所有的东西都发送到终端屏幕上。调用fclose();



这些已经说明了部分原因!

论坛徽章:
0
14 [报告]
发表于 2003-05-08 10:43 |只看该作者

在unix系统中创建守护进程

2 登录会话可以包含多个进程组,这些进程组共享一个控制终端,这个控制终端通常是创建进程的登录终端、控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。

/* 如何影响? */

3、禁止进程重新打开控制终端

  现在,进程已经成为无终端的会话组长,但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端:

/* 有没有比较直观些的例子。。。 而且, 为啥要禁?*/


4。 必要的是关闭0、1、2三个文件描述符,即标准输入、标准输出、标准错误。因为我们一般希望守护进程自己有一套信息输出、输入的体系,而不是把所有的东西都发送到终端屏幕上。

/*如我所述, 我们可以在运行程序时显示重定向(也比较灵活)。 所以,起码对一些应用来说, 关闭012不是必要的。 是否有一些应用是必要的? 是什么? */

论坛徽章:
0
15 [报告]
发表于 2003-05-08 11:42 |只看该作者

在unix系统中创建守护进程

        

论坛徽章:
0
16 [报告]
发表于 2003-10-27 19:02 |只看该作者

在unix系统中创建守护进程

蓝色键盘你好:
你的这个daemon程序例子我测试了,很奇怪,为什么我执行两次kill -HUP `cat exampled.lock`后,daemon程序退出了?
薛定谔的猫 该用户已被删除
17 [报告]
发表于 2003-11-08 17:34 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
18 [报告]
发表于 2005-09-24 12:45 |只看该作者

在unix系统中创建守护进程

原帖由 "nile" 发表:
还有, 关闭 fd0,1,2是必须的吗?

我们可以后台运行一个程序 ---(前台运行没有什么意义嘛, 除了测试)

MyProgam -D -c conf.cfg >;m.log 2>;&1 &


我也搞不明白,为什么要用daemon,后台运行不也很方便吗?

论坛徽章:
0
19 [报告]
发表于 2005-09-24 12:56 |只看该作者

在unix系统中创建守护进程

不过,我发现一个问题,如果用后台运行,我们用exit退出Putty时,后台进程序会把ppid改为1,但是如果我们是强行关闭Putty时,后台进程就会被中止。

论坛徽章:
0
20 [报告]
发表于 2005-09-24 14:32 |只看该作者

在unix系统中创建守护进程

好文章,收了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP