setsid与TIOCNOTTY

扫码查看
下面的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



10-16 07:35
查看更多