/** * 开启从底层过程获取输出和错误输出。 * @return Process * @throws \RuntimeException */ public function enableOutput() {// enableOutput if ($this->isRunning()) {// 如果 运行 throw new \RuntimeException(‘Enabling output while the process is running is not possible.‘); } $this->outputDisabled = false;// 输出 标志位 禁止 return $this;// 返回 类本身 } /** * 输出是否禁用 * @return bool */ public function isOutputDisabled()// 返回 是否 isOutputDisabled 直接返回 当前结果 { return $this->outputDisabled; } /** * 获取当前的输出管道 * @return string * @throws \LogicException * @throws \LogicException * @api */ public function getOutput()// 获取 当前的 输出 管道 { if ($this->outputDisabled) {// 如果 禁止 输出 throw new \LogicException(‘Output has been disabled.‘);// logicException } $this->requireProcessIsStarted(__FUNCTION__);// 获取进程 开始 $this->readPipes(false, ‘\\‘ === DS ? !$this->processInformation[‘running‘] : true);// 读取管道信息 return $this->stdout;// 返回输出 信息 // processInformation } /** * 以增量方式返回的输出结果。 * @return string */ public function getIncrementalOutput() {// 以增量方式返回的输出结果 $this->requireProcessIsStarted(__FUNCTION__);// 开始进程 $data = $this->getOutput();// 获取输出信息 $latest = substr($data, $this->incrementalOutputOffset);// 增量位置 if (false === $latest) {// 如果增量 为空 return ‘‘; } $this->incrementalOutputOffset = strlen($data);// 标注下一次的 起始位置 return $latest;// 返回 增量 是个字符串 } /** * 清空输出 * @return Process */ public function clearOutput()// 清空 输出 { $this->stdout = ‘‘;// 总的输出 数据 $this->incrementalOutputOffset = 0;// 增量位置 初始化为0 return $this;// 返回 类本身 } /** * 返回当前的错误输出的过程 (STDERR)。 * @return string */ public function getErrorOutput() {// 获取错误输出 if ($this->outputDisabled) { throw new \LogicException(‘Output has been disabled.‘); } $this->requireProcessIsStarted(__FUNCTION__);// 开始程序 $this->readPipes(false, ‘\\‘ === DS ? !$this->processInformation[‘running‘] : true);// 读取管道信息 return $this->stderr;// 返回 错误字符串 } /** * 以增量方式返回 errorOutput * @return string */ public function getIncrementalErrorOutput() {// 增量方式 返回错误信息 $this->requireProcessIsStarted(__FUNCTION__); $data = $this->getErrorOutput(); $latest = substr($data, $this->incrementalErrorOutputOffset); if (false === $latest) { return ‘‘; } $this->incrementalErrorOutputOffset = strlen($data); return $latest; }// 同上的 普通信息输出 /** * 清空 errorOutput * @return Process */ public function clearErrorOutput() { $this->stderr = ‘‘; $this->incrementalErrorOutputOffset = 0; return $this; }// 清空 错误 信息 /** * 获取退出码 * @return null|int */ public function getExitCode() {// 获取 退出码 if ($this->isSigchildEnabled() && !$this->enhanceSigchildCompatibility) { throw new \RuntimeException(‘This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.‘); } // 获取退出码 $this->updateStatus(false);//更新状态 return $this->exitcode;// 退出 } /** * 获取退出文本 * @return null|string */ public function getExitCodeText() { if (null === $exitcode = $this->getExitCode()) { return null; } return isset(self::$exitCodes[$exitcode]) ? self::$exitCodes[$exitcode] : ‘Unknown error‘; }// 获取退出 文本提示 /** * 检查是否成功 * @return bool */ public function isSuccessful() { return 0 === $this->getExitCode(); }// 如果正常退出 为0 就是 成功了 /** * 是否未捕获的信号已被终止子进程 * @return bool */ public function hasBeenSignaled() { $this->requireProcessIsTerminated(__FUNCTION__); if ($this->isSigchildEnabled()) { throw new \RuntimeException(‘This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.‘); } $this->updateStatus(false); return $this->processInformation[‘signaled‘]; }
时间: 2024-10-03 21:24:11