免费注册 查看新帖 |

Chinaunix

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

守护进程中关于printf的一点疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-26 11:39 |只看该作者 |倒序浏览
本帖最后由 empty141 于 2010-05-26 12:09 编辑

一般创建一个守护进程会经过以下几步:
1、fork()生成子进程;
2、父进程退出;
3、子进程调用setsid()创建新会话;
4、chdir()更改工作目录;
5、关闭已打开的文件描述符
第3步子进程调用setsid()后会与控制终端分离,此时如果第5步中
不显式关闭已打开的文件描述符(从父进程继承来的,比如标准输出)
子进程仍然可以printf到终端
这里setsid()分离的“控制终端”与printf的“终端”是什么关系

论坛徽章:
0
2 [报告]
发表于 2010-05-26 11:41 |只看该作者
子进程复制了文件描述符,如果不关闭,不应该输出到终端吗?

论坛徽章:
0
3 [报告]
发表于 2010-05-26 11:43 |只看该作者
…………标准输出还不是同一个。。。

哪里不能理解。。。

论坛徽章:
0
4 [报告]
发表于 2010-05-26 12:09 |只看该作者
可能是我没表述明白,我的意思是setsid()使得子进程与控制终端分离,但是仍然可以在终端看到子进程的输出,所以问题是这里setsid()分离的“控制终端”与printf的“终端”是什么关系

论坛徽章:
0
5 [报告]
发表于 2010-05-26 13:13 |只看该作者
控制终端是用来进行作业控制的。没有控制终端的进程,是无法使用 CTRL+Z CTRL+Q CTRL+C 这些,通过终端发送的信号的。只能使用kill来发送信号。只有printf使用的标准输出,跟控制终端是两回事。
运行 sleep 100 < /dev/zero > /dev/null 这个命令时, 虽然标准输入输出已经重定向,但是依然可以通过控制终端的CTRL+Q来终止运行。
还是自己去复习一下Unix的基本知识吧。

论坛徽章:
0
6 [报告]
发表于 2010-05-27 08:30 |只看该作者
谢谢LS ,貌似有点明白了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP