為了創建一個服務(守護程式)我們分叉父進程並使其退出,同時透過呼叫 使子進程成為會話領導者setsid()
。而且我們為什麼要使用setsid()
?我們的孤兒進程由init
(儘管並非所有情況)進程來處理。
我們為什麼要使用setsid()
?setsid()
和處理SIGHUP
訊號之間有什麼關係嗎?
答案1
我們之所以使用,setsid()
是因為如果我們只殺死父母,孩子也會被殺死,也就是setsid()
:
建立一個新會話如果呼叫進程不是進程組領導者。呼叫進程是新會話的領導者、新進程組的進程組領導者,並且沒有控制終端。
父進程是第一個進程組領導者,殺死它 - 或殺死會話/終端 - 殺死該組,這就是我們切換領導者的原因(並在我們處於該狀態時創建一個新會話)。