\n"; $fl_name = './flock.dat'; if(($fn = fopen($fl_name,'c+'))===false) exit('open error'); flock($fn, LOCK_EX,$rc); echo "flock rc = $rc
\n"; $pid = pcntl_fork(); if ($pid == -1){ exit("error pcntl_fork"); }else if ($pid == 0){ // 子プロセス sleep(1); if(($fn2=fopen($fl_name,'r+'))===false) exit('open error'); if(flock($fn2,LOCK_EX | LOCK_NB,$rc)===false){ echo "ko lock2 error $rc
\n"; }else{ echo "ko lock2 success $rc
\n"; } fclose($fn2); exit(0); // これで、子は$fnをクローズする。 } // 子プロセス終了前のロック状態 if(($fn2=fopen($fl_name,'r+'))===false) exit('open error'); if(flock($fn2,LOCK_EX | LOCK_NB,$rc)===false){ echo "lock2 error $rc
\n"; }else{ echo "lock2 success $rc
\n"; } fclose($fn2); sleep(3); // 子プロセス終了後のロック状態 if(($fn2=fopen($fl_name,'r+'))===false) exit('open error'); if(flock($fn2,LOCK_EX | LOCK_NB,$rc)===false){ echo "lock2 error2 $rc
\n"; }else{ echo "lock2 success2 $rc
\n"; } fclose($fn2); fclose($fn); // 上のfclose($fn)でロック解除されているか? if(($fn2=fopen($fl_name,'r+'))===false) exit('open error'); if(flock($fn2,LOCK_EX | LOCK_NB,$rc)===false){ echo "lock2 error3 $rc
\n"; }else{ echo "lock2 success3 $rc
\n"; } fclose($fn2); ?>