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