Mercurial > epgrec.yaz
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); |