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