X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FUtil%2FPidfile.php;h=00a67d872e62b90bf0e6d285517c29436748babc;hb=c5c60d3d050ce2630197027a4b4375c00e270d95;hp=6d940c646905bfbfce0f68cdbd62a335c01eff93;hpb=8db5b121ff0ac7a7f218605e039ad8f273f18ae3;p=friendica.git diff --git a/src/Util/Pidfile.php b/src/Util/Pidfile.php index 6d940c6469..00a67d872e 100644 --- a/src/Util/Pidfile.php +++ b/src/Util/Pidfile.php @@ -7,80 +7,102 @@ namespace Friendica\Util; /** * @brief Pidfile class */ -class Pidfile +class PidFile { - private $file; - private $running; - private $pid; - /** - * @param string $dir path - * @param string $name filename - * @return void + * @brief Read the pid from a given pid file + * + * @param string $file Filename of pid file + * + * @return boolean|string PID or "false" if not existent */ - public function __construct($dir, $name) - { - $this->file = "$dir/$name"; - $this->running = false; - - if (file_exists($this->file)) { - $this->pid = trim(@file_get_contents($this->file)); - if (($this->pid != "") && posix_kill($this->pid, 0)) { - $this->running = true; - } + static private function pidFromFile($file) { + if (!file_exists($file)) { + return false; } - if (!$this->running) { - $this->pid = getmypid(); - file_put_contents($this->file, $this->pid); - } + return trim(@file_get_contents($file)); } /** - * @return void + * @brief Is there a running process with the given pid file + * + * @param string $file Filename of pid file + * + * @return boolean Is it running? */ - public function __destruct() - { - if (!$this->running && file_exists($this->file)) { - @unlink($this->file); + static public function isRunningProcess($file) { + $pid = self::pidFromFile($file); + + if (!$pid) { + return false; } - } - /** - * @brief Check if a process with this pid file is already running - * @return boolean Is it running? - */ - public function isRunning() - { - return $this->running; + // Is the process running? + $running = posix_kill($pid, 0); + + // If not, then we will kill the stale file + if (!$running) { + self::delete($file); + } + return $running; } /** - * @brief Return the pid of the process - * @return boolean process id + * @brief Kills a process from a given pid file + * + * @param string $file Filename of pid file + * + * @return boolean Was it killed successfully? */ - public function pid() - { - return $this->pid; + static public function killProcess($file) { + $pid = self::pidFromFile($file); + + // We don't have a process id? then we quit + if (!$pid) { + return false; + } + + // We now kill the process + $killed = posix_kill($pid, SIGTERM); + + // If we killed the process successfully, we can remove the pidfile + if ($killed) { + self::delete($file); + } + return $killed; } /** - * @brief Returns the seconds that the old process was running - * @return integer run time of the old process + * @brief Creates a pid file + * + * @param string $file Filename of pid file + * + * @return boolean|string PID or "false" if not created */ - public function runningTime() - { - return time() - @filectime($this->file); + static public function create($file) { + $pid = self::pidFromFile($file); + + // We have a process id? then we quit + if ($pid) { + return false; + } + + $pid = getmypid(); + file_put_contents($file, $pid); + + // Now we check if everything is okay + return self::pidFromFile($file); } /** - * @brief Kills the old process - * @return boolean + * @brief Deletes a given pid file + * + * @param string $file Filename of pid file + * + * @return boolean Is it running? */ - public function kill() - { - if (!empty($this->pid)) { - return posix_kill($this->pid, SIGTERM); - } + static public function delete($file) { + return @unlink($file); } }