守護進程化的兩次fork

一、第一次fork,使子進程形式上脫離控制終端,沒必要在掛在終端輸入上。併爲後續的setsid服務。進程

二、setsid使進程變爲會話組長(同時也是進程組長),實際脫離原來的控制終端,不會再收到終端的一些信號。登錄

    a)進程組是一個或多個進程的集合。進程id等於進程組id的進程是組長進程。進程組中只要有一個進程存在,該進程組就存在,與組長進程是否終止無關。終端

    b)會話開始於用戶登陸,終止於用戶退出。setsid用於建立新會話,但若是調用進程爲組長進程,則返回-1。若調用進程不是組長進程,則將該進程變爲新的會話首進程,也成爲新進程組的組長。集合

三、第二次fork實際上不是必需的,主要是爲了防止進程再次打開一個控制終端。再fork一次,子進程不是會話組長(進程id不等於sid),不能打開新的終端。fork

相關文章
相關標籤/搜索