问题描述
- 创建daemon进程时为什么要用setsid创建一个新的session?
-
不管是unix环境高级编程还是网络上都说创建daemon的步骤是:
1. fork
2. setsid创建新session
3. 父进程exit
这样子进程就能脱离terminal了.这样子确实没错, 我之前以为这是为了避免子进程被强制退出, 所以才要脱离terminal和父进程.
但是在实验的时候发现, 没有setsid, 仅仅fork一个子进程并让子进程无限循环, 父进程fork之后exit, 子进程并没有随之结束. 仍然在运行. 同样我在终端输入exit命令之后, 子进程仍然还在运行. 也就是说子进程并不会被强制退出, 那还要创建新的session干嘛?
解决方案
fork子进程后,它会继承父进程所有相关的上下文信息,setsid就是来创建一个新的session,从而清除这些无关信息。
时间: 2025-01-18 15:00:34