我的代码遵循MVC结构,或者更具体地说,我使用的是Codeigniter。我想在后台运行一些东西(无限循环)。但我想在某个时候阻止它。怎么办呢?
我曾尝试向正在运行的操作传递停止信号,但不起作用
class My_controller extends CI_Controller
{
public $stop = false;
public function start()
{
ignore_user_abort();
set_time_limit(0);
do{
....//do something, such as trading bitcoins
}while(! $this->stop);
}
public function stop()
{
$this->stop = true;
}
}
字符串
因此,我想做的是首先mydomain.com/my_controller/start在浏览器上键入“www.example.com“以启动运行,然后mydomain.com/my_controller/stop在浏览器上键入“www.example.com“以停止运行。但是停止动作并没有返回,它只是继续等待。谁能告诉我如何停止后台运行的动作?我不能停止它简单地杀死PID,因为我使用的是共享的网络主机。
我之所以这么做,是因为我想写比特币自动交易的代码,也就是说,我的应用程序会在后台7 X 24不停地运行,获取市场信息,分析数据,并向平台发送交易命令。所以我需要在必要的时候控制停车。
1条答案
按热度按时间dtcbnfnu1#
如果您熟悉运行CLI命令,并且您的共享主机提供商允许您对帐户进行shell访问,则可以为run via a CLI command编写处理程序。CodeIgniter让这一切变得非常简单。一旦你让它工作,你可以键入CLI命令,后跟一个&符号(例如,
php -f index.php controller_name route_name &
),该进程将在进程中运行,直到被kill
命令杀死。但是,请注意,无限循环可能会很快导致系统上的CPU和/或RAM使用失控,如果您的共享主机提供商检测到这一点,他们将不会对您非常满意。我建议您使用sleep()来暂停代码循环执行之间的最大可接受时间量。另外,仔细检查代码,确保在代码的每个循环中没有通过无休止地向数组追加之类的操作来增加内存使用量。