/**
  * Constructor.
  *
  * @param string         $commandline The command line to run
  * @param string|null    $cwd         The working directory or null to use the working dir of the current PHP process
  * @param array|null     $env         The environment variables or null to inherit
  * @param string|null    $input       The input
  * @param int|float|null $timeout     The timeout in seconds or null to disable
  * @param array          $options     An array of options for proc_open
  *
  * @throws RuntimeException When proc_open is not installed
  *
  * @api
  */
 public function __construct($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = array())
 {
     if (!function_exists('proc_open') || !function_exists('proc_close')) {
         throw new Symfony_Process_Exception_RuntimeException('The Process class relies on proc_open, which is not available on your PHP installation.');
     }
     $this->commandline = $commandline;
     $this->cwd = $cwd;
     // on Windows, if the cwd changed via chdir(), proc_open defaults to the dir where PHP was started
     // on Gnu/Linux, PHP builds with --enable-maintainer-zts are also affected
     // @see : https://bugs.php.net/bug.php?id=51800
     // @see : https://bugs.php.net/bug.php?id=50524
     if (null === $this->cwd && (defined('ZEND_THREAD_SAFE') || Symfony_Process_ProcessUtils::isWindows())) {
         $this->cwd = getcwd();
     }
     if (null !== $env) {
         $this->setEnv($env);
     }
     $this->input = $input;
     $this->setTimeout($timeout);
     $this->useFileHandles = Symfony_Process_ProcessUtils::isWindows();
     $this->pty = false;
     $this->enhanceWindowsCompatibility = true;
     $this->enhanceSigchildCompatibility = !Symfony_Process_ProcessUtils::isWindows() && $this->isSigchildEnabled();
     $this->options = Symfony_Process_ProcessUtils::arrayReplace(array('suppress_errors' => true, 'binary_pipes' => true), $options);
 }
 /**
  * Creates a Process instance and returns it.
  *
  * @return Symfony_Process_Process
  *
  * @throws LogicException In case no arguments have been provided
  */
 public function getProcess()
 {
     if (0 === count($this->prefix) && 0 === count($this->arguments)) {
         throw new Symfony_Process_Exception_LogicException('You must add() command arguments before calling getProcess().');
     }
     $options = $this->options;
     $arguments = array_merge($this->prefix, $this->arguments);
     $script = implode(' ', array_map(array('Symfony_Process_ProcessUtils', 'escapeArgument'), $arguments));
     if ($this->inheritEnv) {
         // include $_ENV for BC purposes
         $env = Symfony_Process_ProcessUtils::arrayReplace($_ENV, $_SERVER, $this->env);
     } else {
         $env = $this->env;
     }
     $process = new Symfony_Process_Process($script, $this->cwd, $env, $this->input, $this->timeout, $options);
     if ($this->outputDisabled) {
         $process->disableOutput();
     }
     return $process;
 }