【发布时间】:2015-06-25 00:42:00
【问题描述】:
在运行线程时,使用pcntl_signal 注册的函数永远不会被触发。
<?php
declare(ticks = 1);
class Task extends Thread {
public function run () {
while (1) sleep(1); // run forever
}
}
function shutdown () { // never runs :(
echo "Good bye!\n"; exit;
}
pcntl_signal(SIGTERM, 'shutdown');
$task = new Task;
$task->start();
然后,在终端中:
# kill -TERM 123
在没有线程时可以正常工作:
<?php
declare(ticks = 1);
class Task {
public function run () {
while (1) sleep(1); // run forever
}
}
function shutdown () {
echo "Good bye!\n"; exit;
}
pcntl_signal(SIGTERM, 'shutdown');
$task = new Task;
$task->run();
当我在运行线程时发送 SIGTERM 时如何执行一些代码? 我正在使用:php-5.6.7、pthreads-2.0.10、debian-7
【问题讨论】:
-
Thread类是什么?它是pthreads的一部分还是自制课程?奇怪的是,从 Threads 扩展会破坏它......你确定你的代码真的运行了吗?也许它在Task的定义处崩溃,而没有执行你的最后3 行......?你看过你的php_error.log吗?
标签: php pthreads pcntl sigterm