Browse Source

Separate PID conflict checking from PID claiming

rpm
J. King 3 years ago
parent
commit
bab64add9b
  1. 16
      lib/Service/Daemon.php

16
lib/Service/Daemon.php

@ -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 */

Loading…
Cancel
Save