eee
This commit is contained in:
@@ -29,14 +29,15 @@ trait ReloadWorkers
|
|||||||
}
|
}
|
||||||
|
|
||||||
self::$cachedMasterPid = null;
|
self::$cachedMasterPid = null;
|
||||||
|
|
||||||
|
$pidFilePid = $this->getPidFileMasterPid();
|
||||||
|
if ($pidFilePid !== null) {
|
||||||
|
self::$cachedMasterPid = $pidFilePid;
|
||||||
|
return $pidFilePid;
|
||||||
|
}
|
||||||
$processes = $this->listProcesses();
|
$processes = $this->listProcesses();
|
||||||
$candidates = [];
|
$candidates = [];
|
||||||
|
|
||||||
$pidFile = function_exists('storage') ? storage('.swoole.pid') : '';
|
|
||||||
if (is_file($pidFile)) {
|
|
||||||
$candidates[] = (int)trim((string)file_get_contents($pidFile));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($processes as $process) {
|
foreach ($processes as $process) {
|
||||||
if ($this->isMasterProcessCommand($process['command'])) {
|
if ($this->isMasterProcessCommand($process['command'])) {
|
||||||
$candidates[] = (int)$process['pid'];
|
$candidates[] = (int)$process['pid'];
|
||||||
@@ -62,10 +63,36 @@ trait ReloadWorkers
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$pidFilePid = $this->readPidFile();
|
||||||
|
if ($pidFilePid === $pid && $this->isSameAppProcess($pid)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
$command = $this->readProcessCommand($pid);
|
$command = $this->readProcessCommand($pid);
|
||||||
return $command !== '' && $this->isMasterProcessCommand($command) && $this->isSameAppProcess($pid);
|
return $command !== '' && $this->isMasterProcessCommand($command) && $this->isSameAppProcess($pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getPidFileMasterPid(): ?int
|
||||||
|
{
|
||||||
|
$pid = $this->readPidFile();
|
||||||
|
if ($pid === null || !$this->isProcessAlive($pid) || !$this->isSameAppProcess($pid)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $pid;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function readPidFile(): ?int
|
||||||
|
{
|
||||||
|
$pidFile = function_exists('storage') ? storage('.swoole.pid') : '';
|
||||||
|
if ($pidFile === '' || !is_file($pidFile)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$pid = (int)trim((string)file_get_contents($pidFile));
|
||||||
|
return $pid > 1 ? $pid : null;
|
||||||
|
}
|
||||||
|
|
||||||
private function readProcessCommand(int $pid): string
|
private function readProcessCommand(int $pid): string
|
||||||
{
|
{
|
||||||
$cmdline = @file_get_contents('/proc/' . $pid . '/cmdline');
|
$cmdline = @file_get_contents('/proc/' . $pid . '/cmdline');
|
||||||
@@ -89,7 +116,7 @@ trait ReloadWorkers
|
|||||||
private function listProcesses(): array
|
private function listProcesses(): array
|
||||||
{
|
{
|
||||||
$lines = [];
|
$lines = [];
|
||||||
exec('ps -eo pid=,ppid=,args=', $lines);
|
exec('ps -eo pid=,ppid=,args= 2>/dev/null', $lines);
|
||||||
|
|
||||||
$processes = [];
|
$processes = [];
|
||||||
foreach ($lines as $line) {
|
foreach ($lines as $line) {
|
||||||
|
|||||||
Reference in New Issue
Block a user