1. 程式人生 > >linux下c程式 daemon、fork與建立pthread的順序問題

linux下c程式 daemon、fork與建立pthread的順序問題

近期發如今寫linux c服務程式的時候,daemon與執行緒建立之間出現故障。發現程式在daemon之後,起的執行緒就全掛了。

查過一些文件之後,最終知道了why.

daemon函式的操作事實上非常easy,

1.fork一個程序,2.處理3個標準輸入輸出流

做完之後。主程序就退出了。實際執行的是子程序。

子程序會被掛在init程序上,也就是pid為1的程序。

問題就發生在這個daemon的時間點。

假設在pthread初始化了執行緒之後。再進行daemon。子程序不會擁有之前的執行緒,相反之前的執行緒會隨著主程序一起結束掉。

所以正確的順序是:

daemon -----> pthread create

相同的問題也發生在fork上,正確的順序是

fork -------> 子程序pthread create。父程序退出