我在PHP中遇到了一个奇怪的问题,与symfony 1.4
我有一个启动多个工作线程的任务,有时,我需要停止所有工作线程(例如,在部署之后)。
我使用开始停止守护程序启动任务,我想通过向它发送信号SIGINT来停止它。
所以,这是我的代码:
protected function execute($arguments = array(), $options = array())
{
$pid_arr = array();
$thread = $this->forkChildren($arguments, $options, $options['nb_children']);
if ($this->iAmParent())
{
declare(ticks = 1);
pcntl_signal(SIGINT, array($this, 'signalHandler'));
// Retrieve list of children PIDs
$pid_arr = $this->getChildrenPids();
// While there are still children processes
while(count($pid_arr) > 0)
{
$myId = pcntl_waitpid(-1, $status);
foreach($pid_arr as $key => $pid)
{
// If the stopped process is indeed a children of the parent process
if ($myId == $pid)
{
$this->removeChildrenPid($key);
// Recreate a child
$this->createNewChildren($arguments, $options, 1, $pid_arr);
}
}
usleep(1000000);
$pid_arr = $this->getChildrenPids();
}
}
else
$thread->run();
}
public function signalHandler($signal)
{
echo "HANDLED SIGNAL $signal\n";
foreach ($this->getChildrenPids() as $childrenPid)
{
echo "KILLING $childrenPid\n";
posix_kill($childrenPid, $signal);
}
exit();
}
我所做的非常简单:我分叉,创建N个子进程,在父进程中,我添加一个pcntl_signal来捕获SIGINT信号。signalHanlder函数检索子PID的列表,并向它们发送刚刚接收到的相同信号(so SIGINT)。
问题是当我向父进程发送INT信号(通过终止)时,永远不会调用signalHandler函数。我不明白为什么!
奇怪的是,当我在cli中启动任务并使用Ctrl-C时,会调用signalHandler函数并停止所有子级。
那么,你明白为什么会发生这种情况吗?我做错了什么吗?
好吧,算了吧,我刚问完问题就发现了问题:
我刚刚替换了
$myId = pcntl_waitpid(-1, $status);
经过
$myId = pcntl_waitpid(-1, $status, WNOHANG);
当然,因为等待其中一个孩子死去,整个过程都被搁置了。
我有两个实体使用Spring和Hibernate
问题内容: 我将PHP和mySQL与Idiorm结合使用。那可能不相关。 我的PHP数组 这是父母与子女之间的关系。 0是根父级。 示例:根父级0有孩子33,孩子33有孩子27,孩子27有孩子71。 如果需要解决此问题,可以更改此数组结构。 我的分层结果 像这样,但作为一个数组… 信息 深度未知,可以无限。我尝试了foreach,但可能不是这样。 我自己的想法 一些递归功能? 一些while循环?
问题是要确定子数据的总和是否等于父数据。如果是,返回真,否则返回假。 下面是我的代码,在提交时出现错误。我知道这是一个简单的问题,但在编写了条件之后,我很难通过遍历所有左右节点来递归检查二叉树中每个节点的和条件。 请指导我,因为我哪里做错了。
我以这种方式在实体结构中使用Joined Hibernate继承映射: 我想先保存一个用户,然后在另一个api中保存一个客户,并将该客户映射到第一个用户。所以我尝试用现有的用户id保存一个新客户: 但是,hibernate使用新生成的id(而不是固定传递的id)生成客户,并生成一个新用户。我的问题是:我怎样才能在孩子的父母之后救他?还是反正又有没有救孩子不救父母?
我有两个从抽象类继承的类,它们有父子关系。 所以我使用了注释OneToOne和ManyToOne,但是子类中的父实体总是为空。有人能帮我吗,我花了几个小时谷歌和测试了许多conf,但没有成功。 这些是我的类中的代码: ... ... ... 如果我不添加@JoinCol列注释,JPA会创建一个关联表,但无法检索父级,而关联可以直接通过在数据库中请求来完成。 非常感谢你的帮助。 祝好
我正在尝试制作一个很好的ApiWrapper组件来填充各种子组件中的数据。从我读到的所有内容来看,这应该是可行的:https://jsfidle.net/vinniejames/m1mesp6z/1/ 但由于某种原因,当父状态更改时,子组件似乎没有更新。 我是不是漏了什么?