comparison 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
comparison
equal deleted inserted replaced
167:b307e3749e80 169:e379552d084c
54 if( is_resource( $p ) ) return $p; 54 if( is_resource( $p ) ) return $p;
55 55
56 return false; 56 return false;
57 } 57 }
58 58
59 // 絎祉鴻潟絖祉鴻pid鴻菴 59 // 絎祉ID絖祉鴻pid鴻菴
60 // 鴻鐚 60 // 鴻鐚
61 // 61 //
62 function epgrec_childproc( $p ) 62 function epgrec_childproc( $ppid )
63 { 63 {
64 $st = proc_get_status( $p );
65 $ppid = $st['pid'];
66
67 // ps 絎茵 64 // ps 絎茵
68 $d = array( 65 $d = array(
69 0 => array( 'file','/dev/null','r' ), 66 0 => array( 'file','/dev/null','r' ),
70 1 => array( 'pipe','w' ), 67 1 => array( 'pipe','w' ),
71 2 => array( 'file','/dev/null','w' ), 68 2 => array( 'file','/dev/null','w' ),
86 } 83 }
87 } 84 }
88 fclose( $pipes[1] ); 85 fclose( $pipes[1] );
89 proc_close( $ps ); 86 proc_close( $ps );
90 87
88 foreach( $cpids as $p ) {
89 $ccpids = epgrec_childproc( $p );
90 foreach( $ccpids as $ccpid ) {
91 array_push( $cpids, $ccpid );
92 }
93 }
91 return $cpids; 94 return $cpids;
92 } 95 }
93 96
94 // 絎祉鴻潟絖祉鴻腟篋 97 // 絎祉鴻潟絖祉鴻腟篋
95 98
98 if( DEBUG ) { 101 if( DEBUG ) {
99 global $logfile; 102 global $logfile;
100 system( "ps ax >>".$logfile ); 103 system( "ps ax >>".$logfile );
101 system( "echo ------- >>".$logfile ); 104 system( "echo ------- >>".$logfile );
102 } 105 }
103 106 $status = proc_get_status( $p );
104 $cpids = epgrec_childproc( $p ); 107 $cpids = epgrec_childproc( $status['pid'] );
105 108
106 if( DEBUG ) { 109 if( DEBUG ) {
107 global $logfile; 110 global $logfile;
108 111
109 foreach( $cpids as $cpid ) { 112 foreach( $cpids as $cpid ) {
110 system( "echo ".$cpid." >>".$logfile ); 113 system( "echo ".$cpid." >>".$logfile );
111 } 114 }
112 system( "echo ------- >>".$logfile ); 115 system( "echo ------- >>".$logfile );
113 } 116 }
114 117
118 // 荀罩≪
115 @proc_terminate( $p ); 119 @proc_terminate( $p );
116 sleep(1); 120 usleep(500*1000);
117 @proc_terminate( $p ); // 2綺 121 @proc_terminate( $p ); // 2綺
118 122
119 foreach( $cpids as $cpid ) { 123 foreach( $cpids as $cpid ) {
120 $ret = posix_kill( $cpid, SIGTERM ); // sigterm 124 $ret = posix_kill( $cpid, SIGTERM ); // sigterm
121 usleep(100*1000); 125 usleep(100*1000);
122 if( ! $ret ) posix_kill( $cpid, SIGKILL ); // sigkill 126 if( ! $ret ) posix_kill( $cpid, SIGKILL ); // sigkill
123 } 127 }
124 128
125 if( DEBUG ) { 129 if( DEBUG ) {
126 global $logfile; 130 global $logfile;
127 system( "ps ax >>".$logfile ); 131 system( "ps ax >>".$logfile );
128 system( "echo ------- >>".$logfile ); 132 system( "echo ------- >>".$logfile );
129 } 133 }
130 134
135 /* 祉鴻違鎡罧翫
131 foreach( $cpids as $cpid ) { 136 foreach( $cpids as $cpid ) {
132 $ret = posix_kill( $cpid, SIGTERM ); // sigterm 137 $ret = posix_kill( $cpid, SIGTERM ); // sigterm
133 if( $ret ) return false; // 祉鴻絖с 138 if( $ret ) return false; // 祉鴻絖с
134 } 139 }
140 */
135 return true; // 篆荐若с 141 return true; // 篆荐若с
136 } 142 }
137 143
138 ////// 膩 144 ////// 膩
139 145
224 230
225 // 篋絎腟篋憜吾 231 // 篋絎腟篋憜吾
226 if( time() < $endtime ) { 232 if( time() < $endtime ) {
227 $rrec->endtime = toDatetime( time() ); 233 $rrec->endtime = toDatetime( time() );
228 } 234 }
229
230 // 絎篋違腴 235 // 絎篋違腴
231 $rrec->complete = '1'; 236 $rrec->complete = '1';
232 237
233 // <c緇c鴻腆阪c純 238 // <c緇c鴻腆阪c純
234 sleep(15); 239 sleep(15);