Crypt_GPG
[ class tree: Crypt_GPG ] [ index: Crypt_GPG ] [ all elements ]

Source for file ProcessControl.php

Documentation is available at ProcessControl.php

  1. <?php
  2.  
  3. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  4.  
  5. /**
  6.  * A class for monitoring and terminating processes
  7.  *
  8.  * PHP version 5
  9.  *
  10.  * LICENSE:
  11.  *
  12.  * This library is free software; you can redistribute it and/or modify
  13.  * it under the terms of the GNU Lesser General Public License as
  14.  * published by the Free Software Foundation; either version 2.1 of the
  15.  * License, or (at your option) any later version.
  16.  *
  17.  * This library is distributed in the hope that it will be useful,
  18.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  20.  * Lesser General Public License for more details.
  21.  *
  22.  * You should have received a copy of the GNU Lesser General Public
  23.  * License along with this library; if not, write to the Free Software
  24.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  25.  *
  26.  * @category  Encryption
  27.  * @package   Crypt_GPG
  28.  * @author    Michael Gauthier <mike@silverorange.com>
  29.  * @copyright 2013 silverorange
  30.  * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
  31.  * @version   CVS: $Id$
  32.  * @link      http://pear.php.net/package/Crypt_GPG
  33.  */
  34.  
  35. // {{{ class Crypt_GPG_ProcessControl
  36.  
  37. /**
  38.  * A class for monitoring and terminating processes by PID
  39.  *
  40.  * This is used to safely terminate the gpg-agent for GnuPG 2.x. This class
  41.  * is limited in its abilities and can only check if a PID is running and
  42.  * send a PID SIGTERM.
  43.  *
  44.  * @category  Encryption
  45.  * @package   Crypt_GPG
  46.  * @author    Michael Gauthier <mike@silverorange.com>
  47.  * @copyright 2013 silverorange
  48.  * @license   http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
  49.  * @link      http://pear.php.net/package/Crypt_GPG
  50.  */
  51. {
  52.     // {{{ protected properties
  53.  
  54.     /**
  55.      * The PID (process identifier) being monitored
  56.      *
  57.      * @var integer 
  58.      */
  59.     protected $pid;
  60.  
  61.     // }}}
  62.     // {{{ __construct()
  63.  
  64.     /**
  65.      * Creates a new process controller from the given PID (process identifier)
  66.      *
  67.      * @param integer $pid the PID (process identifier).
  68.      */
  69.     public function __construct($pid)
  70.     {
  71.         $this->pid = $pid;
  72.     }
  73.  
  74.     // }}}
  75.     // {{{ public function getPid()
  76.  
  77.     /**
  78.      * Gets the PID (process identifier) being controlled
  79.      *
  80.      * @return integer the PID being controlled.
  81.      */
  82.     public function getPid()
  83.     {
  84.         return $this->pid;
  85.     }
  86.  
  87.     // }}}
  88.     // {{{ isRunning()
  89.  
  90.     /**
  91.      * Checks if the process is running
  92.      *
  93.      * Uses <kbd>ps</kbd> on UNIX-like systems and <kbd>tasklist</kbd> on
  94.      * Windows.
  95.      *
  96.      * @return boolean true if the process is running, false if not.
  97.      */
  98.     public function isRunning()
  99.     {
  100.         $running = false;
  101.  
  102.         if (PHP_OS === 'WINNT'{
  103.             $command 'tasklist /fo csv /nh /fi '
  104.                 . escapeshellarg('PID eq ' $this->pid);
  105.  
  106.             $result  exec($command);
  107.             $parts   explode(','$result);
  108.             $running (count($parts> 1 && trim($parts[1]'"'== $this->pid);
  109.         else {
  110.             $result  exec('ps -p ' escapeshellarg($this->pid' -o pid=');
  111.             $running (trim($result== $this->pid);
  112.         }
  113.  
  114.         return $running;
  115.     }
  116.  
  117.     // }}}
  118.     // {{{ terminate()
  119.  
  120.     /**
  121.      * Ends the process gracefully
  122.      *
  123.      * The signal SIGTERM is sent to the process. The gpg-agent process will
  124.      * end gracefully upon receiving the SIGTERM signal. Upon 3 consecutive
  125.      * SIGTERM signals the gpg-agent will forcefully shut down.
  126.      *
  127.      * If the <kbd>posix</kbd> extension is available, <kbd>posix_kill()</kbd>
  128.      * is used. Otherwise <kbd>kill</kbd> is used on UNIX-like systems and
  129.      * <kbd>taskkill</kbd> is used in Windows.
  130.      *
  131.      * @return void 
  132.      */
  133.     public function terminate()
  134.     {
  135.         if (function_exists('posix_kill')) {
  136.             posix_kill($this->pid15);
  137.         elseif (PHP_OS === 'WINNT'{
  138.             exec('taskkill /PID ' escapeshellarg($this->pid));
  139.         else {
  140.             exec('kill -15 ' escapeshellarg($this->pid));
  141.         }
  142.     }
  143.  
  144.     // }}}
  145. }
  146.  
  147. // }}}
  148.  
  149. ?>

Documentation generated on Wed, 13 Mar 2013 18:30:11 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.