近期发如今写 Linux c 服务程序的时候, daemon 与线程创建之间出现故障. 发现程序在 daemon 之后, 起的线程就全挂了.
查过一些文档之后, 最终知道了 why.
daemon 函数的操作事实上非常 easy,
1.fork 一个进程, 2. 处理 3 个标准输入输出流
做完之后. 主进程就退出了. 实际执行的是子进程.
子进程会被挂在 init 进程上, 也就是 pid 为 1 的进程.
问题就发生在这个 daemon 的时间点.
假设在 pthread 初始化了线程之后. 再进行 daemon. 子进程不会拥有之前的线程, 相反之前的线程会随着主进程一起结束掉.
所以正确的顺序是:
daemon -----> pthread create
相同的问题也发生在 fork 上, 正确的顺序是
fork -------> 子进程 pthread create. 父进程退出
来源: http://www.bubuko.com/infodetail-2851009.html