(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
pcntl_fork — 在當(dāng)前進(jìn)程當(dāng)前位置產(chǎn)生分支(子進(jìn)程)。譯注:fork是創(chuàng)建了一個(gè)子進(jìn)程,父進(jìn)程和子進(jìn)程 都從fork的位置開(kāi)始向下繼續(xù)執(zhí)行,不同的是父進(jìn)程執(zhí)行過(guò)程中,得到的fork返回值為子進(jìn)程 號(hào),而子進(jìn)程得到的是0。
pcntl_fork()函數(shù)創(chuàng)建一個(gè)子進(jìn)程,這個(gè)子進(jìn)程僅PID(進(jìn)程號(hào)) 和PPID(父進(jìn)程號(hào))與其父進(jìn)程不同。fork怎樣在您的系統(tǒng)工作的詳細(xì)信息請(qǐng)查閱您的系統(tǒng) 的fork(2)手冊(cè)。
成功時(shí),在父進(jìn)程執(zhí)行線程內(nèi)返回產(chǎn)生的子進(jìn)程的PID,在子進(jìn)程執(zhí)行線程內(nèi)返回0。失敗時(shí),在 父進(jìn)程上下文返回-1,不會(huì)創(chuàng)建子進(jìn)程,并且會(huì)引發(fā)一個(gè)PHP錯(cuò)誤。
示例 #1 pcntl_fork() 示例
<?php
$pid = pcntl_fork();
//父進(jìn)程和子進(jìn)程都會(huì)執(zhí)行下面代碼
if ($pid == -1) {
//錯(cuò)誤處理:創(chuàng)建子進(jìn)程失敗時(shí)返回-1.
die('could not fork');
} else if ($pid) {
//父進(jìn)程會(huì)得到子進(jìn)程號(hào),所以這里是父進(jìn)程執(zhí)行的邏輯
pcntl_wait($status); //等待子進(jìn)程中斷,防止子進(jìn)程成為僵尸進(jìn)程。
} else {
//子進(jìn)程得到的$pid為0, 所以這里是子進(jìn)程執(zhí)行的邏輯。
}
?>