我正在閱讀Nginx的開放源代碼,我想知道爲什麼有人殺死父進程並讓子進程處理程序的其餘部分?爲什麼不讓父進程處理它?非常感激你的幫助。殺死父進程並在fork()之後離開子進程的目的是什麼?
我使用Eclipse CDT調試程序,這導致我的調試進入死路,因爲它繼續調試父進程,而不是子進程(實際上處理程序的其餘部分)。
下面是代碼片段:
ngx_int_t
ngx_daemon(ngx_log_t *log)
{
int fd;
switch (fork()) {
case -1:
ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "fork() failed");
return NGX_ERROR;
case 0:
break;
default:
exit(0);
}
/* Do stuff*/
}
編輯:我理解的過程是一個deamonizing程序,但我一直在想,爲什麼我們應該做的是,在開始?
這是將守護程序與父進程的執行環境斷開連接的一種方法。這也是讓程序繼續在後臺運行的一種方式,而用戶可以單獨繼續工作,這在今天的後臺作業的shell中並不是非常需要,只留下第一個原因。 –
如果您爲每個查詢分支,當您更改配置時,您想讓分支完成他們的工作,並殺死父級以使用新配置啓動一個新配置 –
@Someprogrammerdude,謝謝您的回覆。但是,您介意解釋爲什麼我們應該將守護進程從父進程的執行環境中斷開?我已經閱讀了Linux中的守護進程,但我仍然沒有清楚地理解它。非常感謝:) –