<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Process::\_\_construct [TOC] ## 創建子進程 ~~~ swoole_process::__construct(callable $function, bool $redirect_stdin_stdout = false, int $pipe_type = 2, bool $enable_coroutine = false); ~~~ * `$function`,子進程創建成功后要執行的函數,底層會自動將函數保存到對象的`callback`屬性上。如果希望更改執行的函數,可賦值新的函數到對象的`callback`屬性 * `$redirect_stdin_stdout`,重定向子進程的標準輸入和輸出。啟用此選項后,在子進程內輸出內容將不是打印屏幕,而是寫入到主進程管道。讀取鍵盤輸入將變為從管道中讀取數據。默認為阻塞讀取。 * `$pipe_type`,管道類型,啟用`$redirect_stdin_stdout`后,此選項將忽略用戶參數,強制為`1`。如果子進程內沒有進程間通信,可以設置為`0` * `$enable_coroutine`,默認為`false`,在`callback function`中啟用協程,開啟后可以直接在子進程的函數中使用協程`API` > `$enable_coroutine`在`4.3.0`或更高版本可用 ## 管道類型 * `0`:不創建管道 * `1`:創建`SOCK_STREAM`類型管道 * `2`:創建`SOCK_DGRAM`類型管道 * 啟用`$redirect_stdin_stdout`后,此選項將忽略用戶參數,強制為`1` > `Process`對象在銷毀時會自動關閉管道,子進程內如果監聽了管道會收到`CLOSE`事件 > 使用`Process`作為監控父進程,創建管理子進程時,父類必須注冊信號`SIGCHLD`對退出的進程執行`wait`,否則子進程退出時會變成僵尸進程 ## 在子進程中創建 Server 例 1: 可以在`swoole_process`創建的子進程中使用`swoole_server`,但為了安全必須在`$process->start`創建進程后,調用`$worker->exec()`執行。代碼如下: ~~~ <?php $process = new swoole_process('callback_function', true); $pid = $process->start(); function callback_function(swoole_process $worker) { $worker->exec('/usr/local/bin/php', array(__DIR__.'/swoole_server.php')); } swoole_process::wait(); ~~~ 例 2:使用匿名函數作為進程邏輯,并實現了一個簡單的父子進程通訊 ~~~ <?php $process = new swoole_process(function (swoole_process $process) { $process->write('Hello'); }, true); $process->start(); usleep(100); echo $process->read(); // 輸出 Hello ~~~ ## IO 線程池問題 由于`Swoole`的異步文件`IO`使用了線程池,在使用了這些`API`之后再創建`Process`可能會出現非常復雜的帶線程`fork`問題。因此請勿在使用異步文件`IO`函數后創建`Process`。 > `2.1.4`/`1.10.4`或更高版本已經禁止了這種行為,底層檢測到已創建線程池再執行`new Process`會拋出致命錯誤
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看