OSDN Git Service

mod: デバッグバージョン
authorSushi-k <epgrec@park.mda.or.jp>
Fri, 16 Apr 2010 08:31:18 +0000 (17:31 +0900)
committerSushi-k <epgrec@park.mda.or.jp>
Fri, 16 Apr 2010 08:31:18 +0000 (17:31 +0900)
recorder.php

index e3fffe6..488a7be 100755 (executable)
@@ -8,6 +8,8 @@ include_once( INSTALL_PATH . "/Settings.class.php" );
 include_once( INSTALL_PATH . "/recLog.inc.php" );
 include_once( INSTALL_PATH . "/reclib.php" );
 
+define("DEBUG", true );
+
 // 後方互換性
 
 if( ! defined( RECORDER_CMD ) ) {
@@ -19,6 +21,7 @@ $reserve_id = $argv[1];
 $msgh_r = null;                // 受信用メッセージハンドラ
 $msgh_w = null;                // 送信用メッセージハンドラ
 
+$logfile = INSTALL_PATH."/settings/recorder_".$reserve_id.".log";
 
 // ノンブロッキングメッセージ受信
 
@@ -68,7 +71,7 @@ function epgrec_childproc( $p )
                        2 => array( 'file','/dev/null','w' ),
        );
        
-       $ps = proc_open( "/bin/ps -o pid,ppid -ax" , $d, $pipes );
+       $ps = proc_open( "/bin/ps -o pid,ppid ax" , $d, $pipes );
        do {
                $st = proc_get_status( $ps );
        }while( $st['running'] );
@@ -92,24 +95,48 @@ function epgrec_childproc( $p )
 
 function epgrec_termproc( $p )
 {
+       if( DEBUG ) {
+               global $logfile;
+               system( "ps ax >>".$logfile );
+               system( "echo ------- >>".$logfile );
+       }
+       
        $cpids = epgrec_childproc( $p );
        
+       if( DEBUG ) {
+                global $logfile;
+                
+                foreach( $cpids as $cpid ) {
+                       system( "echo ".$cpid." >>".$logfile );
+               }
+               system( "echo ------- >>".$logfile );
+       }
+       
        @proc_terminate( $p );
        sleep(1);
        @proc_terminate( $p );  // 2度送る
        
        foreach( $cpids as $cpid ) {
-               @posix_kill( $cpid, SIGTERM );  // sigterm
-               usleep(100);
-               @posix_kill( $cpid, SIGKILL );  // sigkill
+               $ret = posix_kill( $cpid, SIGTERM );    // sigterm
+               usleep(100*1000);
+               if( ! $ret ) posix_kill( $cpid, SIGKILL );      // sigkill
        }
        
+       if( DEBUG ) {
+               global $logfile;
+               system( "ps ax >>".$logfile );
+               system( "echo ------- >>".$logfile );
+       }
+       
+       foreach( $cpids as $cpid ) {
+               $ret = posix_kill( $cpid, SIGTERM );    // sigterm
+               if( $ret ) return false;        // 恐らくプロセスが存在するのでエラー
+       }
        return true;    // 保証できない
 }
 
 ////// ここから本編
 
-
 // メッセージハンドラを得る
 $ipc_key = ftok( RECORDER_CMD, "R" );
 $msgh_r = msg_get_queue( $ipc_key );