摘要:守護(hù)進(jìn)程為什么需要守護(hù)進(jìn)程呢普通進(jìn)程在運(yùn)行時(shí)可以被控制終端發(fā)出的信號(hào)打斷而守護(hù)進(jìn)程由于脫離了控制終端所以不會(huì)被其打斷守護(hù)進(jìn)程創(chuàng)建的標(biāo)準(zhǔn)流程調(diào)用設(shè)置文件創(chuàng)建的掩碼子進(jìn)程并關(guān)閉父進(jìn)程調(diào)用創(chuàng)建新會(huì)話把當(dāng)前工作目錄切換為根目錄不需要的文件描述符全部
守護(hù)進(jìn)程
為什么需要守護(hù)進(jìn)程呢? 普通進(jìn)程在運(yùn)行時(shí)可以被控制終端發(fā)出的信號(hào)打斷, 而守護(hù)進(jìn)程由于脫離了控制終端, 所以不會(huì)被其打斷.
守護(hù)進(jìn)程創(chuàng)建的標(biāo)準(zhǔn)流程調(diào)用umask設(shè)置文件創(chuàng)建的掩碼
fork子進(jìn)程并關(guān)閉父進(jìn)程
調(diào)用posix_setsid創(chuàng)建新會(huì)話
把當(dāng)前工作目錄切換為根目錄
不需要的文件描述符全部關(guān)閉
標(biāo)準(zhǔn)輸入輸出錯(cuò)誤重定向
除了第2步和第3步,其它的其實(shí)都是可選的.
守護(hù)進(jìn)程PHP代碼function daemon() { umask(0); $pid = pcntl_fork(); if ($pid > 0) { exit(0); } elseif ($pid < 0) { printf("fork failed"); } posix_setsid(); $pid = pcntl_fork(); if ($pid > 0) { exit(0); } elseif ($pid < 0) { printf("fork failed"); } }
把一個(gè)進(jìn)程變成守護(hù)進(jìn)程, 首先要讓該進(jìn)程脫離當(dāng)前的控制終端, 要達(dá)到這個(gè)目的需要調(diào)用posix_setsid.
但我們的代碼為什么在調(diào)用posix_setsid之前要fork一次呢? 這是因?yàn)檎{(diào)用posix_setsid的進(jìn)程必須不能是session leader, 為了確保萬無一失, 會(huì)先fork一個(gè)子進(jìn)程, fork出來的子進(jìn)程就必然不是session leader了.
那在調(diào)用posix_setsid之后為什么還要再fork一次呢? 其實(shí)這必不是必須的, nginx在實(shí)現(xiàn)daemon時(shí)就沒有fork兩次.
很多daemon的實(shí)現(xiàn)都沒有fork兩次. 只是有人推薦在sysv system上, 再fork一次, 可以避免守護(hù)進(jìn)程打開控制終端, 因?yàn)樵?b>fork一次之后, 子進(jìn)程就不是session leader了.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22557.html
摘要:命令行是與守護(hù)進(jìn)程進(jìn)行交互的主要工具。感興趣的話,你也可以開發(fā)一個(gè),使用與守護(hù)進(jìn)程進(jìn)行交互就好了。命令行與守護(hù)進(jìn)程如何交互從左至右理解上圖最左側(cè)是客戶端,即命令行。而在與上運(yùn)行時(shí),守護(hù)進(jìn)程事實(shí)上運(yùn)行在虛擬機(jī)中。 譯者按: Docker是典型的C/S架構(gòu),其守護(hù)進(jìn)程(daemon)與命令行(CLI)是通過REST API進(jìn)行交互的。 原文: Understanding how the D...
摘要:的作用是為其他線程的運(yùn)行提供服務(wù),比如說線程。在某些平臺(tái)上,指定一個(gè)較高的參數(shù)值可能使線程在拋出之前達(dá)到較大的遞歸深度。參數(shù)的值與最大遞歸深度和并發(fā)程度之間的關(guān)系細(xì)節(jié)與平臺(tái)有關(guān)。 今天研究了下Java線程基礎(chǔ)知識(shí),發(fā)現(xiàn)以前太多知識(shí)知識(shí)略略帶過了,比較說Java的線程機(jī)制,在Java中有兩類線程:User Thread(用戶線程)、Daemon Thread(守護(hù)線程),以及構(gòu)造器中的s...
閱讀 2815·2021-11-24 09:39
閱讀 2790·2021-09-23 11:45
閱讀 3415·2019-08-30 12:49
閱讀 3365·2019-08-30 11:18
閱讀 1930·2019-08-29 16:42
閱讀 3352·2019-08-29 16:35
閱讀 1333·2019-08-29 11:21
閱讀 1927·2019-08-26 13:49