data-id="1190000005056078" data-license="sa">
使用函數
pcntl_fork();//建立子進程posix_setsid();//設定當前進程為進程組長posix_getpid();//擷取進程id
例子
workerman中將進程
/** * Run as deamon mode. * * @throws Exception */protected static function daemonize(){ if (!self::$daemonize) { return; } /** * 重設檔案許可權掩碼 * 子進程從父進程繼承了檔案許可權 * 若子進程不涉及到檔案建立,可取消 */ umask(0); $pid = pcntl_fork();//建立子進程 if (-1 === $pid) { throw new Exception('fork fail'); } elseif ($pid > 0) { exit(0); //父進程退出 } /** * 更改子進程為進程組長 * 使子進程擺脫父進程式控制制 */ if (-1 === posix_setsid()) { throw new Exception("setsid fail"); } // Fork again avoid SVR4 system regain the control of terminal. $pid = pcntl_fork(); if (-1 === $pid) { throw new Exception("fork fail"); } elseif (0 !== $pid) { exit(0); }}
其他說明
基本概念
守護進程:Linux中的後台服務進程。它是一個生存期較長的進程,通常獨立於控制終端並且周期性地執行某種任務或等待處理某些發生的事件。守護進程常常在系統引導裝入時啟動,在系統關閉時終止。
進程組:是一個或多個進程的集合。進程組有進程組ID來唯一標識。除了進程號(PID)之外,進程組ID也是一個進程的必備屬性。每個進程組都有一個組長進程,其組長進程的進程號等於進程組ID。且該進程組ID不會因組長進程的退出而受到影響。
會話周期:會話期是一個或多個進程組的集合。通常,一個會話開始於使用者登入,終止於使用者退出,在此期間該使用者啟動並執行所有進程都屬於這個會話期。
建立流程
fork子進程,父進程退出
更改子進程為組長進程
改變目前的目錄為根目錄(chdir())
重設檔案許可權掩碼
關閉檔案描述符
守護進程退出,處理SIGCHLD訊號
訊號處理
//TODO
參考資料
PHP實現守護進程
以上就介紹了workerman筆記-php建立守護進程,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。