国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

多進程應用幫助PHP解決難題

2020-03-24 17:50:49
字體:
來源:轉載
供稿:網友
PHP在很多時候不適合做常駐的SHELl進程, 他沒有專門的gc例程, 也沒有有效的內存管理途徑. 所以如果用PHP做常駐SHELL, 你會經常被內存耗盡導致abort而unhappy.
而且, 如果輸入數據非法, 而腳本沒有檢測, 導致abort, 也會讓你很不開心.那? 怎么辦呢?呵呵, 別著急, 多進程來幫您! 那,這是為什么呢?優點:1. 使用多進程, 子進程結束以后, 內核會負責回收資源2. 使用多進程,子進程異常退出不會導致整個進程Thread退出. 父進程還有機會重建流程.3. 一個常駐主進程, 只負責任務分發, 邏輯更清楚.
Then, 怎么做呢? 接下來, 我們使用PHP提供的POSIX和Pcntl系列函數, 來實現一個PHP命令解析器, 主進程負責接受用戶輸入, 然后fork子進程執行, 并負責回顯子進程的結束狀態.
代碼如下, 我加了注釋, 如果有不懂的地方, 可以翻閱手冊相關函數, 或者回復留言.#!/bin/env php
?php
/** A example denoted muti-process application in php
* @filename fork.php
* @touch date Wed 10 Jun 2009 10:25:51 PM CST
* @author Laruence laruence@baidu.com
* @license http://www.zend.com/license/3_0.txt PHP License 3.0
* @version 1.0.0
*/
/** 確保這個函數只能運行在SHELL中 */
if
(substr(php_sapi_name(), 0, 3) !== 'cli')
{
die( This Programe can only be run in CLI mode
}
/** 關閉最大執行事件限制, 在CLI模式下, 這個語句其實不必要 */
set_time_limit(0);$pid = posix_getpid(); //取得主進程ID
$user = posix_getlogin(); //取得用戶名
echo
EOD
USAGE: [command | expression]
input php code to execute by fork a new process
input quit to exit Shell Executor version 1.0.0 by laruence
EOD;
while
(true)
{
$prompt = /n{$user}$
$input = readline($prompt); readline_add_history($input);
if
($input == 'quit')
{
break;
}
process_execute($input . ';');
}
exit(0);function
process_execute($input)
{
$pid = pcntl_fork(); //創建子進程
if
($pid == 0)
{//子進程
$pid = posix_getpid();
echo
* Process {$pid} was created, and Executed:/n/n
eval($input); //解析命令
exit;
}
else
{//主進程
$pid = pcntl_wait($status, WUNTRACED); //取得子進程結束狀態
if
(pcntl_wifexited($status))
{
echo
/n/n* Sub process: {$return['pid']} exited with {$status}
}
}
}html教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵南县| 徐闻县| 高要市| 开远市| 道真| 上饶市| 平谷区| 阳东县| 桦甸市| 瑞昌市| 福贡县| 太原市| 锦州市| 克什克腾旗| 萍乡市| 阿克苏市| 锡林浩特市| 花莲县| 壤塘县| 永嘉县| 洛隆县| 枣庄市| 丘北县| 根河市| 吴旗县| 扎鲁特旗| 永城市| 屏山县| 青川县| 隆德县| 寻甸| 永寿县| 舞阳县| 广宁县| 溧水县| 丹阳市| 冷水江市| 诏安县| 原阳县| 三河市| 安义县|