Using instance instead of class
This commit is contained in:
parent
4dfd90646c
commit
411dc2aefc
@ -102,11 +102,7 @@ class Asynchronous
|
||||
*/
|
||||
public static function awaitChildren()
|
||||
{
|
||||
$instance = self::getInstance();
|
||||
while (count($instance->children) > 0) {
|
||||
pcntl_wait($status);
|
||||
array_shift($instance->children);
|
||||
}
|
||||
self::getInstance()->_awaitChildren();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -114,15 +110,7 @@ class Asynchronous
|
||||
*/
|
||||
public static function killChildren()
|
||||
{
|
||||
$instance = self::getInstance();
|
||||
|
||||
/*
|
||||
* Require the children to terminate
|
||||
*/
|
||||
foreach ($instance->children as $index => $pid)
|
||||
if (!posix_kill($pid, SIGKILL))
|
||||
posix_kill($pid, SIGTERM);
|
||||
|
||||
self::getInstance()->_killChildren();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -130,11 +118,7 @@ class Asynchronous
|
||||
*/
|
||||
public static function removeShmBlock()
|
||||
{
|
||||
$instance = self::getInstance();
|
||||
if (is_resource($instance->shm)) {
|
||||
shm_remove($instance->shm);
|
||||
shm_detach($instance->shm);
|
||||
}
|
||||
self::getInstance()->_removeShmBlock();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -165,6 +149,52 @@ class Asynchronous
|
||||
$this->attachShm();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return $this
|
||||
*/
|
||||
private function _awaitChildren()
|
||||
{
|
||||
/*
|
||||
* Wait for the children to terminate
|
||||
*/
|
||||
while (count($this->children) > 0) {
|
||||
pcntl_wait($status);
|
||||
array_shift($this->children);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return $this
|
||||
*/
|
||||
private function _killChildren()
|
||||
{
|
||||
/*
|
||||
* Require the children to terminate
|
||||
*/
|
||||
foreach ($this->children as $index => $pid)
|
||||
if (!posix_kill($pid, SIGKILL))
|
||||
posix_kill($pid, SIGTERM);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return $this
|
||||
*/
|
||||
private function _removeShmBlock()
|
||||
{
|
||||
/*
|
||||
* Detach from the shared memory block
|
||||
*/
|
||||
if (is_resource($this->shm)) {
|
||||
shm_remove($this->shm);
|
||||
shm_detach($this->shm);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return $this
|
||||
@ -231,23 +261,21 @@ class Asynchronous
|
||||
if ($instance->isChild)
|
||||
return;
|
||||
|
||||
self::awaitChildren();
|
||||
self::removeShmBlock();
|
||||
$instance->_awaitChildren();
|
||||
$instance->_removeShmBlock();
|
||||
});
|
||||
|
||||
/*
|
||||
* The signal handler
|
||||
*/
|
||||
foreach([SIGHUP, SIGINT, SIGQUIT, SIGKILL, SIGTERM] as $signal)
|
||||
pcntl_signal($signal, function($s) use (&$instance) {
|
||||
foreach ([SIGINT, SIGKILL, SIGTERM] as $signal)
|
||||
pcntl_signal($signal, function ($signal) use (&$instance) {
|
||||
if ($instance->isChild)
|
||||
return;
|
||||
|
||||
self::killChildren();
|
||||
self::awaitChildren();
|
||||
self::removeShmBlock();
|
||||
$instance->_killChildren();
|
||||
$instance->_removeShmBlock();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user