Windowsで二重起動を防止させるためには、Mutexインスタンスを生成した際にエラーが出るかどうかで判断できる。
Linuxではその方法がよく分からないので、プロセス管理から見た形で実装をした例がの通り。
<?php
//プロセスコントロールクラス
define(‘PROC_ONLY’, 1); //プログラムベースで比較
define(‘CONTAIN_ARG’, 2); //引数が完全一致するかで比較
class ProcControl{
//二重起動を防止するためのプログラム
function isCurProcRuning($check_mode = PROC_ONLY){
global $argv;
if ($check_mode == PROC_ONLY){
$target = $argv[0];
} else {
$target = ‘”‘ . implode(‘ ‘, $argv) . ‘”‘;
}
$handle = popen(“ps -ef | grep -w $target | grep -cv grep”, ‘r’);
$read = fread($handle, 2096);
pclose($handle);
return $read > 1;
}
}
//プロセスの2重起動を防止を判定
if (ProcControl::isCurProcRuning(CONTAIN_ARG)) die(“process already exist\n”);
?>