<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2015 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: yunwuxin <448901948@qq.com>
// +----------------------------------------------------------------------

namespace think;
//主要的 命名空间
use think\process\exception\Failed as ProcessFailedException;// 异常失败
use think\process\exception\Timeout as ProcessTimeoutException;// 时间异常
use think\process\pipes\Pipes;// 打包
use think\process\Utils;// 外部引入
use think\process\pipes\Unix as UnixPipes;// unix 打包
use think\process\pipes\Windows as WindowsPipes;// window 打包

class Process
{// 类似于 进程管理的 这样的概念
    // 静态属性
    const ERR = 'err';// 错误
    const OUT = 'out';// 输出

    const STATUS_READY      = 'ready';// 状态 就绪
    const STATUS_STARTED    = 'started';// 状态 开始
    const STATUS_TERMINATED = 'terminated';// 状态 终止

    const STDIN  = 0;// 输入
    const STDOUT = 1;// 输出
    const STDERR = 2;// 异常

    const TIMEOUT_PRECISION = 0.2;// 时间溢出等级

    // 私有 属性
    private $callback;// 回调函数
    private $commandline;// 命令行
    private $cwd;// 未知
    private $env;// 环境
    private $input;// 输入
    private $starttime;// 开始时间
    private $lastOutputTime;// 最后输出时间
    private $timeout;// 溢出时间
    private $idleTimeout;// 不知道是什么溢出时间
    private $options;// 选项
    private $exitcode;// 退出代码
    private $fallbackExitcode;// 回调函数 退出代码
    private $processInformation;// 处理信息
    private $outputDisabled               = false;// 输出 允许状态
    private $stdout;// 标准 输出流
    private $stderr;// 标准 错误
    private $enhanceWindowsCompatibility  = true;// 加强 windows 容错能力
    private $enhanceSigchildCompatibility;// 加强 子菜单 容错能力
    private $process;// 处理
    private $status                       = self::STATUS_READY;// 就绪状态
    private $incrementalOutputOffset      = 0;// 增加 输出 偏移量
    private $incrementalErrorOutputOffset = 0;// 错误 输出 偏移量
    private $tty;// 类似于 标志位
    private $pty;// 同上 未知

    private $useFileHandles = false;// 使用文件处理 句柄

    /** @var Pipes */
    private $processPipes;// 管道符 参数

    private $latestSignal;// 最后的 参数

    private static $sigchild;// 子元素