fork進程實例
$ppid = posix_getpid();
$pid = pcntl_fork();
if ($pid == -1) {
throw new Exception('fork子進程失敗!');
} elseif ($pid > 0) {
cli_set_process_title("我是父進程,我的進程id是{$ppid}.");
sleep(30); // 保持30秒,確保能被ps查到
} else {
$cpid = posix_getpid();
cli_set_process_title("我是{$ppid}的子進程,我的進程id是{$cpid}.");
sleep(30);
}
分發信號處理器
我們通過在父進程接收子進程傳來的信號,判斷子進程狀態,來對子進程進行管理。
我們需要在父進程里使用pcntl_signal()函數和pcntl_signal_dispatch()函數來給各個子進程安裝信號處理器。
pcntl_signal (int $signo , callback $handler) 安裝一個信號處理器;
$signo是待處理的信號常量,callback是其處理函數
pcntl_signal_dispatch () 調用每個等待信號通過pcntl_signal()安裝的處理器
PHP內常見的信號常量有:
SIGCHLD 子進程退出成為僵尸進程會向父進程發送此信號
SIGHUP 進程掛起
SIGTEM 進程終止
... // 其他請在手冊中查看
處理子進程
對子進程的處理方法有:
posix_kill():此函數并不能顧名思義,它通過向子進程發送一個信號來操作子進程,在需要要時可以選擇給子進程發送進程終止信號來終止子進程;
pcntl_waitpid():等待或返回fork的子進程狀態,如果指定的子進程在此函數調用時已經退出(俗稱僵尸進程),此函數將立刻返回,并釋放子進程的所有系統資源,此進程可以避免子進程變成僵尸進程,造成系統資源浪費;
下面是兩個函數的函數原型:
bool posix_kill ( int $pid , int $sig ) // 向進程id為$pid的進程發送$sig信號,$sig常見信號如上;
int pcntl_waitpid ( int $pid , int &$status [, int $options = 0 ] ) // 掛起當前進程的執行直到進程號為$pid的進程退出(如果$pid為-1,則等待任意一個子進程);
- 關于我
- laravel
- quickstart
- quickstart-intermediate
- swoole
- (一)快速起步
- php7
- swoole異步高性能
- 開發中常見問題
- event擴展的安裝
- phptrace
- 用C/C++寫php擴展
- 無聊的筆試題
- rewrite二級目錄轉二級域名
- php多進程
- rpc-yar
- php專家列表
- php守護進程
- php函數防止超時
- php分析報錯信息
- gdb調試php
- php-cli模式
- composer/pear
- 基礎
- sublime+xdebug
- 開啟opcache
- 前端
- js
- linux
- Xshell連接不上Ubuntu解決方式
- xshell
- centos安裝中文輸入
- centos下安裝谷歌瀏覽器
- centos安裝phpstorm
- php7之phpredis安裝
- 磁盤大小
- dns
- TCP/IP協議
- HTTP
- tcpdump
- zbacktrace
- gdb調試php擴展
- lsof
- perf
- lnmp
- first
- 重定向
- echo
- 鍵盤高效操作
- 權限控制
- 進程
- 環境變量
- vi
- 軟件包管理
- 網絡
- 查找文件
- 壓縮
- 正則
- sed/awk
- 編譯程序
- shell腳本
- shell認識
- sh腳本
- sh調試相關
- win共享文件夾給虛擬機
- git
- git的安裝
- 常用命令
- 本地到遠程倉庫
- 遠程到本地倉庫
- 分支管理
- bug分支
- feature
- 標簽
- 多人協作
- FAQ
- C/C++
- 難點
- 修飾符
- 數組
- 字符串
- 指針
- 引用
- 面向對象
- 類訪問修飾符
- 構造函數
- 操作文件
- mysql集群
- 使用navicat操作MySQL數據庫能不能整個數據庫搜索一條數據?
- 幫助的使用
- 存儲引擎的選擇
- 數據類型/字符集
- 索引
- kafka集群
- rabbitmq集群
- (一)初識rabbitmq
- (二)原理
- (三)消息模型
- (四)rabbitmq&php基礎
- (五)持久化&route&指定exchange
- (六)發布訂閱
- (七)route key
- (八)topic
- elasticsearch集群
- (一)服務端搭建
- (二)elasticsearch&php
- (三)head插件
- redis集群
- github
- 設計模式
- createType
- factory_method.php
- abstract_factory.php
- mysql_singleton.php
- builder.php
- prototype.php
- structType
- adapter.php
- 數據結構與算法
- python