守护进程化(Daemonization)

守护进程是指在后台运行的应用程序,而不是由用户直接操作的程序。守护进程的例子包括 Cron 和 MySQL。

使用 PHP 将进程守护化非常简单,并且需要 PHP 4.1 或更高版本,并且 PHP 需要使用 --enable-pcntl 参数进行编译。

创建守护进程

我们首先使用 set_time_limit(0) 来让脚本无限期运行。接下来,我们使用 pcntl_fork() 来分叉 PHP 进程。最后,使用 posix_setsid() 来告诉子进程以会话领导者身份在后台运行。

<?
   set_time_limit(0);   // 移除时间限制
 
   if (pcntl_fork()) {  // 分叉进程
     print "守护进程正在运行。";
   } else {
     $sid = posix_setsid(); // 让子进程成为会话领导者
       
     if ($sid < 0)
            exit;
 
     while (true) {
                        // 守护进程脚本代码
     }
   }
?>

while 循环中的代码将在后台运行,直到显式调用 exitdie

应用场景

虽然将脚本守护化是非常有用的,但并非适用于所有脚本。如果一个脚本只需要在某个特定时间执行,它可以利用 Cron 来进行定时执行。

相关参考

  • Nanoserv
  • Sonic Server Daemon
Last modified: Friday, 10 January 2025, 2:54 AM