国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

pcntl擴(kuò)展學(xué)習(xí)筆記一(pcntl_fork與pcntl_wait,串行執(zhí)行分析)

TesterHome / 1983人閱讀

摘要:對編程的理解,應(yīng)該到深入到操作系統(tǒng)級(jí)別。進(jìn)程控制,我一直都沒有接觸,感覺好高端,今天啃了一下擴(kuò)展的最簡單的兩個(gè)函數(shù),有點(diǎn)心得,記錄一下吧,歡迎拋磚。

對編程的理解,應(yīng)該到深入到操作系統(tǒng)級(jí)別。進(jìn)程控制,我一直都沒有接觸,感覺好高端,今天啃了一下pcntl擴(kuò)展的最簡單的兩個(gè)函數(shù),有點(diǎn)心得,記錄一下吧,歡迎拋磚。
新建代碼文件 pcntl_wait.php,如下:

    $i = 0;
    while($i < 2) {
        $pid = pcntl_fork();
        // 父進(jìn)程和子進(jìn)程都會(huì)執(zhí)行以下代碼
        if ($pid == -1) { // 創(chuàng)建子進(jìn)程錯(cuò)誤,返回-1
            die("could not fork");
        } else if ($pid) {
            // 父進(jìn)程會(huì)得到子進(jìn)程號(hào),所以這里是父進(jìn)程執(zhí)行的邏輯
            pcntl_wait($status); // 父進(jìn)程必須等待一個(gè)子進(jìn)程退出后,再創(chuàng)建下一個(gè)子進(jìn)程。
        
            $cid = $pid; // 子進(jìn)程的ID
            $pid = posix_getpid(); // pid 與mypid一樣,是當(dāng)前進(jìn)程Id
            $myid = getmypid();
            $ppid = posix_getppid(); // 進(jìn)程的父級(jí)ID
            $time = microtime(true);
            echo "I am parent cid:$cid   myid:$myid pid:$pid ppid:$ppid i:$i $time 
";
        } else {
            // 子進(jìn)程得到的$pid 為0,所以這里是子進(jìn)程的邏輯
            $cid = $pid;
            $pid = posix_getpid();
            $ppid = posix_getppid();
            $myid = getmypid();
            $time = microtime(true);
            echo "I am child cid:$cid   myid:$myid pid:$pid ppid:$ppid i:$i  $time 
";
            //exit;
            //sleep(2);
        }
        $i++;
    }

php -f pcntl_wait.php 運(yùn)行結(jié)果如下:

I am child   cid:0      myid:6499 pid:6499 ppid:6498 i:0  1491394182.2065
I am child   cid:0      myid:6500 pid:6500 ppid:6499 i:1  1491394182.2077
I am parent  cid:6500   myid:6499 pid:6499 ppid:6498 i:1  1491394182.2143
I am parent  cid:6499   myid:6498 pid:6498 ppid:3471 i:0  1491394182.2211
I am child   cid:0      myid:6501 pid:6501 ppid:6498 i:1  1491394182.222
I am parent  cid:6501   myid:6498 pid:6498 ppid:3471 i:1  1491394182.2302

為何是如上運(yùn)行過程?
參考了PHP手冊和網(wǎng)友blog以上代碼能夠循環(huán)產(chǎn)生子進(jìn)程,并且父進(jìn)程會(huì)阻塞等待子進(jìn)程退出,這樣就產(chǎn)生了一個(gè)問題,父進(jìn)程必須等待一個(gè)子進(jìn)程退出后,再創(chuàng)建另外一個(gè)
個(gè)人分析如下:

1.運(yùn)行shell命令(該進(jìn)程ID是3471),生成主進(jìn)程PID為6498

開始循環(huán)i=0

  6498 此時(shí)的父進(jìn)程
   |fork  
  6499 父進(jìn)程(6498阻塞),該子進(jìn)程(6499)執(zhí)行 ,輸出:child cid:0 myid:6499 pid:6499 ppid:6498 i:0  1491394182.2065
       然后i++ i=1,再次循環(huán)

繼續(xù)循環(huán)i=1

  6499 此時(shí)的父進(jìn)程
   |fork
  6500 父進(jìn)程(6499阻塞),該子進(jìn)程(6500)執(zhí)行,輸出:child cid:0  myid:6500 pid:6500 ppid:6499 i:1  1491394182.2077
       然后i++ i=2,本次循環(huán)終止,回到其主進(jìn)程6499
  6499 解除阻塞,
       此時(shí)i=1(因?yàn)樽枞麜r(shí)i=1),繼續(xù)執(zhí)行  輸出:parent cid:6500  myid:6499 pid:6499 ppid:6498 i:1  1491394182.2143
       然后i++ i=2,本次循環(huán)終止,回到其主進(jìn)程6498
  6498 解除阻塞,
       此時(shí)i=0(因?yàn)樽枞麜r(shí)i=0),繼續(xù)執(zhí)行,輸出:parent cid:6499  myid:6498 pid:6498 ppid:3471 i:0  1491394182.2211
       然后i++ i=1,再次循環(huán)

繼續(xù)循環(huán)i=1

  6498 此時(shí)的父進(jìn)程
   |fork
  6501 父進(jìn)程(6498阻塞),該子進(jìn)程(6501)執(zhí)行,輸出:child cid:0  myid:6501 pid:6501 ppid:6498 i:1  1491394182.222
       然后i++ i=2,本次循環(huán)終止,回到其主進(jìn)程6498
  6498 解除阻塞
       此時(shí)i=1(因?yàn)樽枞麜r(shí)為i=1),繼續(xù)執(zhí)行,輸出:parent cid:6501 myid:6498 pid:6498 ppid:3471 i:1  1491394182.2302      
       然后i++ i=2,本次循環(huán)終止,回到其主進(jìn)程3471,最后命令結(jié)束。
             

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/22661.html

相關(guān)文章

  • workerman 簡要分析

    摘要:后面每開啟一個(gè)子進(jìn)程,會(huì)將子進(jìn)程的存儲(chǔ)到中,用來后面主進(jìn)程監(jiān)控子進(jìn)程,如果子進(jìn)程意外終止,主進(jìn)程可以重新佛。將當(dāng)前子進(jìn)程設(shè)置為會(huì)話組再次創(chuàng)建子進(jìn)程,為了防止在的系統(tǒng)下重新打開控制終端。 wokerman 啟動(dòng)分析 @(學(xué)習(xí))[workerman, php] 前期想說的 也是最近才看的代碼,遇到不懂得地方就去google,所以這篇文章里面穿插了很多參考資料,可以直接點(diǎn)擊閱覽。 需要了解一...

    senntyou 評論0 收藏0
  • 從0到1優(yōu)雅的實(shí)現(xiàn)PHP多進(jìn)程管理

    摘要:目的綜上所述,我的目標(biāo)就是實(shí)現(xiàn)基于模式實(shí)現(xiàn)的多進(jìn)程管理工具。備注下文中,父進(jìn)程統(tǒng)稱為子進(jìn)程統(tǒng)稱為。最后我們通過下圖來簡單的總結(jié)和描述這個(gè)多進(jìn)程實(shí)現(xiàn)的過程控制上面實(shí)現(xiàn)了多進(jìn)程和多進(jìn)程的常駐內(nèi)存,那如何去管理呢答案多進(jìn)程通信。 _ | | _ __ __ _ _ __...

    lakeside 評論0 收藏0
  • PHP回顧之多進(jìn)程編程

    摘要:多進(jìn)程中與多進(jìn)程相關(guān)的兩個(gè)重要拓展是和。函數(shù)執(zhí)行期間,主進(jìn)程除了等待無法處理其他任務(wù),所以一般不認(rèn)為這是多進(jìn)程編程。回收子進(jìn)程有兩種方式,一種是主進(jìn)程調(diào)用函數(shù)等待子進(jìn)程結(jié)束另外一種是處理信號(hào)。 轉(zhuǎn)載請注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請求 cookie web響應(yīng) session 數(shù)據(jù)庫操作 加解...

    lifesimple 評論0 收藏0
  • PHP 進(jìn)程的實(shí)現(xiàn)管理

    摘要:運(yùn)行模式實(shí)現(xiàn)進(jìn)程前,需了解常見的的運(yùn)行模式通用網(wǎng)關(guān)接口模式模式命令行模式模塊模式作為服務(wù)器模塊而進(jìn)程則是使用命令行模式運(yùn)行的基本實(shí)現(xiàn)中提供了一個(gè)擴(kuò)展,可以利用操作系統(tǒng)的調(diào)用來實(shí)現(xiàn)多進(jìn)程。 應(yīng)用場景 一些耗時(shí)任務(wù): 大數(shù)據(jù)表分表后的統(tǒng)計(jì)信息功能 分批發(fā)送短信或郵件功能 其他可分目標(biāo)的任務(wù)功能(很多種) 所以我們就需要一個(gè)常駐內(nèi)存的任務(wù)管理工具,為了保證實(shí)時(shí)性,一方面我們讓它一直執(zhí)行任...

    MockingBird 評論0 收藏0
  • PHP 進(jìn)程的實(shí)現(xiàn)管理

    摘要:運(yùn)行模式實(shí)現(xiàn)進(jìn)程前,需了解常見的的運(yùn)行模式通用網(wǎng)關(guān)接口模式模式命令行模式模塊模式作為服務(wù)器模塊而進(jìn)程則是使用命令行模式運(yùn)行的基本實(shí)現(xiàn)中提供了一個(gè)擴(kuò)展,可以利用操作系統(tǒng)的調(diào)用來實(shí)現(xiàn)多進(jìn)程。 應(yīng)用場景 一些耗時(shí)任務(wù): 大數(shù)據(jù)表分表后的統(tǒng)計(jì)信息功能 分批發(fā)送短信或郵件功能 其他可分目標(biāo)的任務(wù)功能(很多種) 所以我們就需要一個(gè)常駐內(nèi)存的任務(wù)管理工具,為了保證實(shí)時(shí)性,一方面我們讓它一直執(zhí)行任...

    testbird 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<