X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FUtil%2FPidfile.php;h=00a67d872e62b90bf0e6d285517c29436748babc;hb=3940e804e3ee4ac921e109f62a73fac2becaa611;hp=a5d1171e7b4e83ce4290e59915b9279bf07d2e4c;hpb=3bb53967f4f0bd82210197717a1bed2e79db118b;p=friendica.git diff --git a/src/Util/Pidfile.php b/src/Util/Pidfile.php index a5d1171e7b..00a67d872e 100644 --- a/src/Util/Pidfile.php +++ b/src/Util/Pidfile.php @@ -7,66 +7,102 @@ namespace Friendica\Util; /** * @brief Pidfile class */ -class Pidfile +class PidFile { - private $file; - private $running; - /** - * @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.pid"; - - if (file_exists($this->_file)) { - $pid = trim(@file_get_contents($this->file)); - if (($pid != "") && posix_kill($pid, 0)) { - $this->running = true; - } + static private function pidFromFile($file) { + if (!file_exists($file)) { + return false; } - if (! $this->running) { - $pid = getmypid(); - file_put_contents($this->file, $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; } + + // 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; } /** - * @return boolean + * @brief Kills a process from a given pid file + * + * @param string $file Filename of pid file + * + * @return boolean Was it killed successfully? */ - public static function isRunning() - { - return self::$running; + 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; } /** - * @return object + * @brief Creates a pid file + * + * @param string $file Filename of pid file + * + * @return boolean|string PID or "false" if not created */ - public static function runningTime() - { - return time() - @filectime(self::$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); } /** - * @return boolean + * @brief Deletes a given pid file + * + * @param string $file Filename of pid file + * + * @return boolean Is it running? */ - public static function kill() - { - if (file_exists(self::$file)) { - return posix_kill(file_get_contents(self::$file), SIGTERM); - } + static public function delete($file) { + return @unlink($file); } }