|
|
@ -74,23 +74,24 @@ class Daemon { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
protected function checkPID(string $pidfile, bool $lock) { |
|
|
|
if (!$lock) { |
|
|
|
protected function checkPID(string $pidfile) { |
|
|
|
if (file_exists($pidfile)) { |
|
|
|
$pid = @file_get_contents($pidfile); |
|
|
|
if (preg_match("/^\d+$/s", (string) $pid)) { |
|
|
|
if (@posix_kill((int) $pid, 0)) { |
|
|
|
if ($this->processExists((int) $pid)) { |
|
|
|
throw new \Exception("Process already exists"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
} |
|
|
|
|
|
|
|
public function writePID(string $pidfile): void { |
|
|
|
if ($f = @fopen($pidfile, "c+")) { |
|
|
|
if (@flock($f, \LOCK_EX | \LOCK_NB)) { |
|
|
|
// confirm that some other process didn't get in before us |
|
|
|
$pid = fread($f, 100); |
|
|
|
if (preg_match("/^\d+$/s", (string) $pid)) { |
|
|
|
if (@posix_kill((int) $pid, 0)) { |
|
|
|
if ($this->processExists((int) $pid)) { |
|
|
|
throw new \Exception("Process already exists"); |
|
|
|
} |
|
|
|
} |
|
|
@ -103,9 +104,12 @@ class Daemon { |
|
|
|
throw new \Exception("Process already exists"); |
|
|
|
} |
|
|
|
} else { |
|
|
|
throw new Exception("Could not write to PID file"); |
|
|
|
throw new \Exception("Could not write to PID file"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
protected function processExists(int $pid): bool { |
|
|
|
return @posix_kill($pid, 0); |
|
|
|
} |
|
|
|
|
|
|
|
/** Resolves the PID file path and ensures the file or parent directory is writable */ |
|
|
|