使用函數pcntl_fork();//建立子程序 posix_setsid();//設定目前進程為進程組長posix_getpid();//取得進程id範例workerman中將進程/*** Run as deamon mode.** @throws Exception*/ protected static"/> 使用函數pcntl_fork();//建立子程序 posix_setsid();//設定目前進程為進程組長posix_getpid();//取得進程id範例workerman中將進程/*** Run as deamon mode.** @throws Exception*/ protected static">

首頁  >  文章  >  後端開發  >  workerman筆記-php建立守護程式

workerman筆記-php建立守護程式

WBOY
WBOY原創
2016-07-29 08:51:041712瀏覽

data-id="1190000005056078" data-license="sa">

使用函數

<code>pcntl_fork();//创建子进程
posix_setsid();//设置当前进程为进程组长

posix_getpid();//获取进程id</code>

範例

workerman中將進程

<code>/**
 * 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);
    }
}</code>

其他說明

ux它是一個生存期較長的進程,通常獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。守護程式常常在系統引導裝入時啟動,在系統關閉時終止。

進程組:是一個或多個進程的集合。進程組有進程組ID來唯一識別。除了進程號(PID)之外,進程組ID也是一個進程的必備屬性。每個進程組都有一個組長進程,其組長進程的進程號等於進程組ID。且該進程組ID不會因組長進程的退出而受到影響。

會話週期:會話期是一個或多個進程組的集合。通常,一個會話開始於使用者登錄,終止於使用者退出,在此期間該使用者執行的所有進程都屬於這個會話期。

建立流程

fork子進程,父進程退出
  1. 更改子程序為組長進程
  2. 為根目錄(chdir(
  3. 關閉檔案描述符
  4. 守護程式退出,處理SIGCHLD訊號
  5. 訊號處理
/PH/TODO

以上就介紹了workerman筆記-php創建守護進程,包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn