/**
  * @param string $class
  * @param LoopInterface $loop
  * @param array $options
  * @return PromiseInterface
  */
 public static function createFromClass($class, LoopInterface $loop, array $options = [])
 {
     $options = array_merge(self::$defaultOptions, $options);
     return \WyriHaximus\React\ChildProcess\Pool\detectCoreCount($loop, $options)->then(function ($coreCount) use($class, $loop, $options) {
         $options[Options::SIZE] = $coreCount;
         $processes = [];
         for ($i = 0; $i < $coreCount; $i++) {
             $processes[] = Resolver::resolve($i, '%s')->then(function ($command) use($class) {
                 return \React\Promise\resolve(new ClassName($class, ['cmdTemplate' => $command]));
             });
         }
         return \React\Promise\all($processes)->then(function ($processes) use($loop, $options) {
             return \React\Promise\resolve(new Fixed(new ArrayList($processes), $loop, $options));
         });
     });
 }
/**
 * @param $address
 * @param Process $childProcess
 * @return Process
 */
function rebuildProcess($address, Process $childProcess)
{
    return Resolver::resolve($address, getProcessPropertyValue('cmd', $childProcess))->then(function ($cmd) use($childProcess) {
        return \React\Promise\resolve(new Process($cmd, getProcessPropertyValue('cwd', $childProcess), getProcessPropertyValue('env', $childProcess), getProcessPropertyValue('options', $childProcess)));
    });
}