php pcntl_fork和pcntl_fork 的用法
更新時(shí)間:2009年04月13日 10:23:17 作者:
這是兩個(gè)php的多線程的方法,在Windows下不可用,在Linux下需要編譯。
pcntl_fork()函數(shù)就是為當(dāng)前的進(jìn)程創(chuàng)建一個(gè)子進(jìn)程。并且先運(yùn)行父進(jìn)程,返回的是子進(jìn)程的PID,肯定大于零。在父進(jìn)程的代碼中可以用pcntl_fork(&$status)暫停父進(jìn)程知道他的子進(jìn)程有返回值。注意:父進(jìn)程的阻塞同時(shí)會(huì)阻塞子進(jìn)程。但是父進(jìn)程的結(jié)束不影響子進(jìn)程的運(yùn)行。
父進(jìn)程運(yùn)行完了會(huì)接著運(yùn)行子進(jìn)程,這時(shí)子進(jìn)程會(huì)從執(zhí)行pcntl_fork()的那條語句開始執(zhí)行(包括此函數(shù)),但是此時(shí)它返回的是零(代表這是一個(gè)子進(jìn)程)。在子進(jìn)程的代碼塊中最好有exit語句,即執(zhí)行完子進(jìn)程后立即就結(jié)束。否則它會(huì)又重頭開始執(zhí)行這個(gè)腳本的某些部分(一直沒有總結(jié)出規(guī)矩)。
總之,注意兩點(diǎn):
1。子進(jìn)程最好有一個(gè)exit;語句,防止不必要的出錯(cuò);
2.
$pid = pcntl_fork();
//這里最好不要有其他的語句
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
// we are the parent
pcntl_wait($status); //Protect against Zombie children
} else {
// we are the child
}
父進(jìn)程運(yùn)行完了會(huì)接著運(yùn)行子進(jìn)程,這時(shí)子進(jìn)程會(huì)從執(zhí)行pcntl_fork()的那條語句開始執(zhí)行(包括此函數(shù)),但是此時(shí)它返回的是零(代表這是一個(gè)子進(jìn)程)。在子進(jìn)程的代碼塊中最好有exit語句,即執(zhí)行完子進(jìn)程后立即就結(jié)束。否則它會(huì)又重頭開始執(zhí)行這個(gè)腳本的某些部分(一直沒有總結(jié)出規(guī)矩)。
總之,注意兩點(diǎn):
1。子進(jìn)程最好有一個(gè)exit;語句,防止不必要的出錯(cuò);
2.
復(fù)制代碼 代碼如下:
$pid = pcntl_fork();
//這里最好不要有其他的語句
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
// we are the parent
pcntl_wait($status); //Protect against Zombie children
} else {
// we are the child
}
相關(guān)文章
php實(shí)現(xiàn)簡單路由實(shí)現(xiàn)偽靜態(tài)
這篇文章主要為大家詳細(xì)介紹了php如何實(shí)現(xiàn)簡單路由實(shí)現(xiàn)偽靜態(tài),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
php命令行(cli)下執(zhí)行PHP腳本文件的相對(duì)路徑的問題解決方法
這篇文章主要介紹了php命令行(cli)下執(zhí)行PHP腳本文件的相對(duì)路徑的問題解決方法,特別是在crontab中運(yùn)行PHP腳本時(shí),肯定會(huì)遇到路徑問題,參照本文方法即可解決,需要的朋友可以參考下2015-05-05
php實(shí)現(xiàn)圖片上傳并進(jìn)行替換操作
這篇文章主要為大家詳細(xì)介紹了php實(shí)現(xiàn)圖片上傳并進(jìn)行替換操作,講解的很詳細(xì),通俗易懂,感興趣的小伙伴們可以參考一下2016-03-03
PHP實(shí)現(xiàn)的sqlite數(shù)據(jù)庫連接類
這篇文章主要介紹了PHP實(shí)現(xiàn)的sqlite數(shù)據(jù)庫連接類,涉及針對(duì)SQLite數(shù)據(jù)庫的連接與增刪改查等sql操作用法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12

