не совсем корректно блокировать запуск демона только по пиду, т.к. он не является уникальным. Может быть ситуация когда пид файл останется, по причине какого нибудь сбоя, приведшего к перезагрузке. При следующем старте этот пид может оказаться у другого процесса, и твой демон не запустится, пока ты его ручками не убьёшь.
Я делал так
...
@global @global @param
function start($pid){
global $CONFIG, $CMD;
if(file_exists($CONFIG['pid_file'])){
$file_pid = file_get_contents($CONFIG['pid_file']);
$ps = shell_exec('ps -A | grep '.$CMD);
if(preg_match_all('#(\d+)[^\r\n]+#', $ps, $pids)){
if(in_array($file_pid, $pids[1])){
echo "\nPHP daemon already started\n\n";
exit(1);
}
}
}
file_put_contents($CONFIG['pid_file'], $pid);
$message = "\nPHP daemon started at: ".date("H:i:s d/m/Y")."\nProcess ID: ".$pid."\n\n";
file_put_contents($CONFIG['logfile'], $message, FILE_APPEND);
echo $message;
exit(0);
}