PHP:pcntl_signal用于什么?

时间:2010-10-13 17:40:20

标签: php

我找到了一段我以前没见过的代码:

declare(ticks = 1);
pcntl_signal(SIGINT, array($this, "catchSignal"));
pcntl_signal(SIGTERM, array($this, "catchSignal"));

我在PHP文档中查找了该函数,但我仍然不明白它的用途。请帮助我理解这个用途以及应该在何处实施的一些例子。

3 个答案:

答案 0 :(得分:5)

声明语句声明每个“tick”检查事件。 “tick”大致等于一行代码。这在命令行PHP脚本中使用,因此您可以捕获中断并正常关闭脚本,而不是仅仅删除它。

array($this, "catchSignal")函数中的pcntl_signal是一个奇怪的工作(在我看来)支持“对象”作为参数。通常你会做$this->catchSignal(),但在这种情况下PHP不接受类对象作为参数。因此“数组”语法。

基本上,如果脚本发出中断或终止信号,请在关闭之前调用$this->catchSignal()功能。

答案 1 :(得分:3)

它用于安装signal个处理程序。我能说的任何其他事情都只是重复这篇文章。

答案 2 :(得分:3)

理解信号处理的主要原因是它是操作系统的陷阱。因此,它可能发生在代码的正常执行路径之外,当它可能正在执行其他操作时会中断它。例如,如果你在* nix中控制-C,它通常会杀死正在运行的程序。但如果该程序正在做一些敏感的事情,立即停止可能是个坏主意。因此,持久的程序将以不同的方式处理终止信号;在终止执行之前优雅地停止它正在做的事情。

pcntl_signal是在PHP中执行此操作的方法。