Example #1
0
 /**
  * 检查控制终端是否已经关闭, 如果控制终端关闭,则停止打印数据到终端
  * @return void
  */
 public static function checkTty()
 {
     // 已经重置了fd,就不检查终端是否关闭,因为不会打印东西到屏幕了
     if (self::$hasResetStd) {
         return;
     }
     // 没开启debug不打印数据到屏幕,不检测终端是否关闭
     if (!Config::get('workerman.debug')) {
         return;
     }
     // 检测终端是否关闭
     if (!self::$terminalClosed && !@posix_ttyname(STDOUT)) {
         self::resetStdFd(true);
         // 日志
         self::notice("terminal closed and reset workers fd");
         // 获取所有子进程pid
         $all_worker_pid = self::getPidWorkerNameMap();
         // 向所有子进程发送重置标准输入输出信号
         foreach ($all_worker_pid as $pid => $worker_name) {
             // 发送SIGTTOU信号
             posix_kill($pid, SIGTTOU);
         }
         // 设置标记
         self::$terminalClosed = true;
     }
 }
Example #2
0
 /**
  * 停止服务
  * @return void
  */
 public static function stop()
 {
     // 如果没有子进程则直接退出
     $all_worker_pid = self::getPidWorkerNameMap();
     if (empty($all_worker_pid)) {
         exit(0);
     }
     // 标记server开始关闭
     self::$serviceStatus = self::STATUS_SHUTDOWN;
     // killWorkerTimeLong 秒后如果还没停止则强制杀死所有进程
     Lib\Task::add(self::KILL_WORKER_TIME_LONG, array('\\Man\\Core\\Master', 'stopAllWorker'), array(true), false);
     // 停止所有worker
     self::stopAllWorker();
 }
Example #3
0
 /**
  * 检查是否有线程退出了
  * @param thread $work
  */
 public static function check($work)
 {
     self::$threadIsTerminated = false;
     if ($work->isTerminated()) {
         self::$threadIsTerminated = true;
         return true;
     }
     return false;
 }