Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1090789
  • 博文数量: 190
  • 博客积分: 1156
  • 博客等级: 少尉
  • 技术积分: 2153
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-16 15:01
个人简介

go!go!go!

文章分类

全部博文(190)

文章存档

2023年(11)

2022年(13)

2021年(15)

2020年(38)

2019年(3)

2018年(6)

2016年(1)

2015年(16)

2014年(13)

2013年(24)

2012年(46)

分类: LINUX

2013-12-07 18:31:56

下面的setsid与 ioctl 将tty置为null的作用都是想把 子进程与当前的终端脱离,来避免信号对该终端的操作进而导致对守护进程的影响。stackoverflow中对为什么用setsid给出了详细的解释。

为啥相同的事情为何要操作两遍呢,更多的可能是为了兼容在*nix下都可以使用而不出问题。


  1.     if ((pid = fork()) < 0)
  2.         syslog(LOG_ALERT, "fork failed: %s", xstrerror());
  3.     else if (pid > 0)
  4.         exit(0);
  5.     if (setsid() < 0)
  6.         syslog(LOG_ALERT, "setsid failed: %s", xstrerror());
  7. #ifdef TIOCNOTTY
  8.     if ((i = open("/dev/tty", O_RDWR | O_TEXT)) >= 0) {
  9.         ioctl(i, TIOCNOTTY, NULL);
  10.         close(i);
  11.     }
  12. #endif



阅读(3345) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~