workerman筆記-php建立守護進程

來源:互聯網
上載者:User
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不會因組長進程的退出而受到影響。

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

建立流程

  1. fork子進程,父進程退出

  2. 更改子進程為組長進程

  3. 改變目前的目錄為根目錄(chdir())

  4. 重設檔案許可權掩碼

  5. 關閉檔案描述符

  6. 守護進程退出,處理SIGCHLD訊號

訊號處理

//TODO

參考資料

PHP實現守護進程

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

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.