/**
 * Promise that resolves once child process exits
 *
 * @param LoopInterface $loop    ReactPHP event loop.
 * @param Process       $process Child Process to run.
 *
 * @return \React\Promise\PromiseInterface
 */
function childProcessPromise(LoopInterface $loop, Process $process)
{
    $deferred = new Deferred();
    $buffers = ['stderr' => '', 'stdout' => ''];
    $process->on('exit', function ($exitCode) use($deferred, &$buffers) {
        $deferred->resolve(new ProcessOutcome($exitCode, $buffers['stderr'], $buffers['stdout']));
    });
    \WyriHaximus\React\futurePromise($loop, $process)->then(function (Process $process) use($loop, &$buffers) {
        $process->start($loop);
        $process->stderr->on('data', function ($output) use(&$buffers) {
            $buffers['stderr'] .= $output;
        });
        $process->stdout->on('data', function ($output) use(&$buffers) {
            $buffers['stdout'] .= $output;
        });
    });
    return $deferred->promise();
}
 /**
  * @return PromiseInterface
  */
 public function execute($program = '')
 {
     if ($program === '') {
         return new RejectedPromise();
     }
     $deferred = new Deferred();
     $process = new Process('exec hash ' . $program);
     $process->on('exit', function ($exitCode) use($deferred) {
         if ($exitCode == 0) {
             $deferred->resolve();
             return;
         }
         $deferred->reject();
     });
     \WyriHaximus\React\futurePromise($this->loop, $process)->then(function (Process $process) {
         $process->start($this->loop);
     });
     return $deferred->promise();
 }
 /**
  * @return PromiseInterface
  */
 public function execute()
 {
     $deferred = new Deferred();
     $buffer = '';
     $process = new Process('exec nproc');
     $process->on('exit', function ($exitCode) use($deferred, &$buffer) {
         if ($exitCode == 0) {
             $deferred->resolve($buffer);
             return;
         }
         $deferred->reject();
     });
     \WyriHaximus\React\futurePromise($this->loop, $process)->then(function (Process $process) use(&$buffer) {
         $process->start($this->loop);
         $process->stdout->on('data', function ($output) use(&$buffer) {
             $buffer += $output;
         });
     });
     return $deferred->promise();
 }