diff recorder.php @ 169:e379552d084c

fix: recorder.php:子プロセスを再帰的に停止させるよう変更
author epgrec@park.mda.or.jp <yoneda@recorder.localnet.mda.or.jp>
date Sun, 18 Apr 2010 18:06:39 +0900
parents b307e3749e80
children c729a68415eb
line wrap: on
line diff
--- a/recorder.php	Fri Apr 16 18:04:23 2010 +0900
+++ b/recorder.php	Sun Apr 18 18:06:39 2010 +0900
@@ -56,14 +56,11 @@
 	return false;
 }
 
-// 絎祉鴻潟絖祉鴻pid鴻菴
+// 絎祉ID絖祉鴻pid鴻菴
 // 鴻鐚
 //
-function epgrec_childproc( $p )
+function epgrec_childproc( $ppid )
 {
-	$st = proc_get_status( $p );
-	$ppid = $st['pid'];
-	
 	// ps 絎茵
 	$d = array(
 			0 => array( 'file','/dev/null','r' ),
@@ -88,6 +85,12 @@
 	fclose( $pipes[1] );
 	proc_close( $ps );
 	
+	foreach( $cpids as $p ) {
+		$ccpids = epgrec_childproc( $p );
+		foreach( $ccpids as $ccpid ) {
+			array_push( $cpids, $ccpid );
+		}
+	}
 	return $cpids;
 }
 
@@ -100,8 +103,8 @@
 		system( "ps ax >>".$logfile );
 		system( "echo ------- >>".$logfile );
 	}
-	
-	$cpids = epgrec_childproc( $p );
+	$status = proc_get_status( $p );
+	$cpids = epgrec_childproc( $status['pid'] );
 	
 	if( DEBUG ) {
 		 global $logfile;
@@ -112,12 +115,13 @@
 		system( "echo ------- >>".$logfile );
 	}
 	
+	// 荀罩≪
 	@proc_terminate( $p );
-	sleep(1);
+	usleep(500*1000);
 	@proc_terminate( $p );	// 2綺
 	
 	foreach( $cpids as $cpid ) {
-		$ret = posix_kill( $cpid, SIGTERM );	// sigterm
+		$ret = posix_kill( $cpid, SIGTERM );		// sigterm
 		usleep(100*1000);
 		if( ! $ret ) posix_kill( $cpid, SIGKILL );	// sigkill
 	}
@@ -128,10 +132,12 @@
 		system( "echo ------- >>".$logfile );
 	}
 	
+	/* 祉鴻違鎡罧翫
 	foreach( $cpids as $cpid ) {
 		$ret = posix_kill( $cpid, SIGTERM );	// sigterm
-		if( $ret ) return false;	// 祉鴻絖с
+		if( $ret ) return false;				// 祉鴻絖с
 	}
+	*/
 	return true;	// 篆荐若с
 }
 
@@ -226,7 +232,6 @@
 	if( time() < $endtime ) {
 		$rrec->endtime = toDatetime( time() );
 	}
-	
 	// 絎篋違腴
 	$rrec->complete = '1';