/** * Execute commands in parallel. * * @param array $cmds list of commands to be executed. * @param string $cwd absolute path of working directory. * @return array list of processes. */ function cli_execute_parallel($cmds, $cwd = null) { require_once __DIR__ . "/../../vendor/autoload.php"; $processes = array(); // Create child process. foreach ($cmds as $name => $cmd) { $process = new Symfony\Component\Process\Process($cmd); $process->setWorkingDirectory($cwd); $process->setTimeout(null); $processes[$name] = $process; $processes[$name]->start(); // If error creating process then exit. if ($processes[$name]->getStatus() !== 'started') { echo "Error starting process: {$name}"; foreach ($processes[$name] as $process) { if ($process) { $process->signal(SIGKILL); } } exit(1); } } return $processes; }