首頁 後端開發 php教程 php 多进程中的信号有关问题

php 多进程中的信号有关问题

Jun 13, 2016 pm 12:38 PM
pcntl process quot

php 多进程中的信号问题

1.以下代码sleep时间远小于20

<?php // 当子进程退出时,会触发该函数
function sig_handler($sig) {
	switch($sig) {
		case SIGCHLD:
			echo 'SIGCHLD received'."n";
	}
}
  
pcntl_signal(SIGCHLD, "sig_handler");// 注册子进程退出时调用的函数

$start          = time(); 

$sub_process_cnt = 20;
for($i=0;$i<$sub_process_cnt;$i++) { 
  
	sleep(1);   
	 
	$pid  = pcntl_fork(); 
	if ($pid == 0) {

		exit(-1);
	}
}


$status = 0;
 
for ($k=0; $k<$sub_process_cnt; $k++) 
{
	pcntl_waitpid(-1, $status );
}


$end            = time();
$usage          = $end - $start;
print "End, use: ".$usage." seconds" ;
    
?>
登入後複製
2.原因:sleep过程中被子进程返回的信号中断。

3.解决办法:

pcntl_signal(SIGCHLD, SIG_IGN ); //忽略子进程返回信号

全部代码如下

<?php // 当子进程退出时,会触发该函数
function sig_handler($sig) {
	switch($sig) {
		case SIGCHLD:
			echo 'SIGCHLD received'."n";
	}
}
  
pcntl_signal(SIGCHLD, SIG_IGN );// 注册子进程退出时调用的函数

$start          = time(); 

$sub_process_cnt = 20;
for($i=0;$i<$sub_process_cnt;$i++) { 
  
	sleep(1);   
	 
	$pid  = pcntl_fork(); 
	if ($pid == 0) {

		exit(-1);
	}
}


$status = 0;
 
for ($k=0; $k<$sub_process_cnt; $k++) 
{
	pcntl_waitpid(-1, $status );
}


$end            = time();
$usage          = $end - $start;
print "End, use: ".$usage." seconds" ;
    
?>
登入後複製


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

PHP PCNTL中fork失敗的常見錯誤及解決方案 PHP PCNTL中fork失敗的常見錯誤及解決方案 Feb 28, 2024 am 11:06 AM

PHPPCNTL中fork失敗的常見錯誤及解決方案在使用PHPPCNTL擴充進行流程管理時,常會遇到fork失敗的問題。 fork是建立子程序的一種方法,在某些情況下可能會因為一些錯誤導致fork操作失敗。本文將介紹一些常見的fork失敗的錯誤以及相應的解決方案,並提供具體的程式碼範例來幫助讀者更好地理解和處理這些問題。 1.記憶體不足可能的錯誤訊息:Can

PHP PCNTL擴充fork函數失敗的原因分析 PHP PCNTL擴充fork函數失敗的原因分析 Feb 28, 2024 pm 09:42 PM

PHPPCNTL擴充fork函數失敗的原因分析在PHP中,PCNTL擴充提供了一系列用於處理程序控制的函數,其中fork函數是其中一個常用的函數之一。透過fork函數,我們可以建立一個子進程來執行某個任務,這在編寫並發處理程序時非常有用。然而,在使用PCNTL擴展的fork函數時,有時會遇到fork失敗的情況,本文將分析這種情況發生的原因,並給出具體的代

java中的Process怎麼能使用 java中的Process怎麼能使用 May 10, 2023 am 11:04 AM

說明1、Process類別是抽象類別(所有方法都是抽象的),封裝進程(即執行程式)。 2.Process類別提供了從過程輸入、執行輸出到過程、等待過程完成、檢查過程的退出狀態和銷毀過程的方法。實例Processp=null;try{p=Runtime.getRuntime().exec("notepad.exe");p.waitFor();}catch(Exceptione){e.printStackTrace();}System.out.println("我想被印...

PHP PCNTL中fork函數失效的偵錯技巧分享 PHP PCNTL中fork函數失效的偵錯技巧分享 Feb 28, 2024 pm 05:21 PM

PHPPCNTL中fork函數失效的偵錯技巧分享在PHP程式設計中,PCNTL擴充提供了一些進程控制的函數,例如fork函數可以用來建立新的進程。但是在使用過程中,有時候會遇到fork函數失效的情況,導致子程序無法正常建立。本文將分享一些調試技巧,幫助我們解決這個問題。首先,讓我們從一個簡單的例子開始。假設我們有以下PHP程式碼:

PHP PCNTL fork失敗導致的程式異常及修復方法 PHP PCNTL fork失敗導致的程式異常及修復方法 Feb 28, 2024 am 11:39 AM

PHPPCNTL是PHP提供的擴充函式庫,用來處理處理程序控制相關的函數。在編寫PHP多進程程序時,PCNTL庫可以幫助我們建立子進程,進行進程間通信,以及管理進程的狀態等。然而,在使用PCNTL函式庫時,有時會遇到fork失敗導致程式異常的情況。本文將深入探討這個問題,並提供修復方法,同時附上具體的程式碼範例。錯誤現像在使用PHPPCNTL庫建立子進程時,我們

如何解決PHP PCNTL中fork失敗的問題 如何解決PHP PCNTL中fork失敗的問題 Feb 28, 2024 pm 06:03 PM

對不起,我無法提供關於如何解決PHPPCNTL中fork失敗的問題的文章。如果您有任何其他問題或需要協助,請隨時告訴我。讓我知道我能為您做些什麼!

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 Jun 13, 2016 am 10:15 AM

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没问题。

See all articles