免费注册 查看新帖 |

Chinaunix

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

创建daemon进程时不调用setsid会如何!? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-11 19:08 |只看该作者 |倒序浏览
setsid就是创建一个会话,中断控制终端,
int main(int argc, char* argv[])
{
pid_t pid = -1;
if((pid=fork())<0)
{
return -1;
}
if(pid >0)
{
exit(0);
}
int n = setsid();
if(n<0)
{
printf("error");
}
umask(0);
chdir("/");
system("id");
while(1)
{
sleep(10);
}
}
如果中断终端system函数为什么还在终端显示

如果不创建会话对daemon有有什么影响?
能否举个例子说明!
谢谢大家了!

[ 本帖最后由 HunterForPig 于 2006-11-11 19:27 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-11-11 19:25 |只看该作者
你要明白什么是daemon进程。

论坛徽章:
0
3 [报告]
发表于 2006-11-11 19:29 |只看该作者
楼上讲讲如何!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-11-11 19:35 |只看该作者
daemon的一个重要属性就是要后台运行,
也就是没有控制终端,而调用setsid的目的也在于此。
具体请参考《unix环境高级编程》第13章。

论坛徽章:
0
5 [报告]
发表于 2006-11-11 19:41 |只看该作者
没有控制终端和有控制终端不同在何处呢!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-11-11 19:47 |只看该作者
原帖由 HunterForPig 于 2006-11-11 19:41 发表
没有控制终端和有控制终端不同在何处呢!

哥们,你在*nix下写过无限循环的程序吗?
如果在终端上你运行这个程序,然后你退出了终端,
你这个程序会如何?
就最简单的,一个for(;循环,自已没写过,赶快试验一下。

PS:问题发到帖子里面即可,不要用站内短信。

论坛徽章:
0
7 [报告]
发表于 2006-11-12 18:34 |只看该作者
一般情况下,要作为daemon运行,需要调用setpgid(),把自己交给init组,以此来完全与控制终端断开联系。

论坛徽章:
0
8 [报告]
发表于 2006-11-12 23:00 |只看该作者

回复 7楼 longshort 的帖子

楼上的,是调用setsid吧?setpgid是设置进程组id啊。进程组id和session id并不是完全等同的概念吧。

论坛徽章:
0
9 [报告]
发表于 2006-11-13 07:44 |只看该作者
楼上,要想作为daemon运行,就照我说的做吧。

论坛徽章:
0
10 [报告]
发表于 2006-11-13 08:20 |只看该作者
完全可以不做任何特殊处理,就和普通程序一样,什么fork啊,setsid啊等等都可以不用.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP