一、php中pcntl_fork函數(shù)概述
pcntl_fork()函數(shù)是php中用于創(chuàng)建子進(jìn)程的一個(gè)函數(shù),返回創(chuàng)建的子進(jìn)程的pid。
該函數(shù)創(chuàng)建子進(jìn)程具體fork的過(guò)程:
(1)調(diào)用該函數(shù)即創(chuàng)建一個(gè)子進(jìn)程,創(chuàng)建成功父進(jìn)程返回子進(jìn)程的pid,子進(jìn)程返回0;
(2)創(chuàng)建子進(jìn)程實(shí)際上對(duì)父進(jìn)程的一個(gè)拷貝,共享代碼空間,拷貝父進(jìn)程的數(shù)據(jù),也就是說(shuō)父進(jìn)程改變父進(jìn)程的數(shù)據(jù),子進(jìn)程改變子進(jìn)程的數(shù)據(jù)變量等;
二、示例代碼分析
代碼示例:
?php $curr_pid = posix_getpid();//獲取當(dāng)前的進(jìn)程id //將當(dāng)前進(jìn)程的id寫入文件中 echo '當(dāng)前進(jìn)程:'.$curr_pid.PHP_EOL; //開始創(chuàng)建子進(jìn)程 $son_pid = pcntl_fork();//返回子進(jìn)程的id //查看當(dāng)前進(jìn)程 echo '創(chuàng)建子進(jìn)程之后當(dāng)前的進(jìn)程為:'.posix_getpid().PHP_EOL; //創(chuàng)建了子進(jìn)程之后 if($son_pid > 0){ echo '子進(jìn)程id:'.$son_pid.PHP_EOL; }
以上代碼執(zhí)行后結(jié)果為:
示例代碼分析:
(1)發(fā)現(xiàn)創(chuàng)建了子進(jìn)程之后,系統(tǒng)會(huì)切換到子進(jìn)程中,而子進(jìn)程中的代碼是從含有pcntl_fork函數(shù)的那行執(zhí)行的
(2)創(chuàng)建子進(jìn)程之后,子進(jìn)程的代碼段是拷貝pcntl_fork函數(shù)及之后的代碼段,之前的代碼段并不拷貝,但是具體的數(shù)據(jù)變量子進(jìn)程仍然會(huì)拷貝
(3)可見,fork之后程序會(huì)分叉執(zhí)行,即子進(jìn)程執(zhí)行
三、pcntl_fork的業(yè)務(wù)場(chǎng)景舉例
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
標(biāo)簽:荊門 遵義 寧夏 徐州 武威 常州 遂寧 吐魯番
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《php中pcntl_fork創(chuàng)建子進(jìn)程的方法實(shí)例》,本文關(guān)鍵詞 php,中,pcntl,fork,創(chuàng)建,子,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。