]> git.mxchange.org Git - friendica.git/blobdiff - src/Util/Pidfile.php
Merge pull request #8271 from MrPetovan/bug/8229-frio-mobile-back-to-top
[friendica.git] / src / Util / Pidfile.php
index a5d1171e7b4e83ce4290e59915b9279bf07d2e4c..6d4c0c51089aa6bb137d3ea8f0870d88d4c579a5 100644 (file)
 <?php
 /**
- * @file src/Util/Pidfile.php
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
  */
+
 namespace Friendica\Util;
 
 /**
- * @brief Pidfile class
+ * Pidfile class
  */
-class Pidfile
+class PidFile
 {
-       private $file;
-       private $running;
-
        /**
-        * @param string $dir  path
-        * @param string $name filename
-        * @return void
+        * 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
+        * 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
+        * 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
+        * 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
+        * 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);
        }
 }