我有几个脚本运行了很长时间(6 个多小时)。它们都包含一个执行此操作的主循环,以及一个已注册的关闭函数,该函数触发了一个 mysql 查询以宣布该过程为“完成”。
我决定在这些主循环中使用 pcntl_fork() ,将每一轮作为不同的进程运行,以使整个脚本更快地完成。
它工作正常,但是,每个子进程仍然注册了关闭功能。因此,每次子进程完成时,它都会调用 mysql 查询并将脚本宣布为完成。如何为子进程禁用该关闭功能,但为父进程保持活动状态?
示例代码以了解发生了什么:
常见的.php
register_shutdown_function('shutdown'); function shutdown() { global $objDb,$arg_id ; echo "\n\n Executing queue process shutdown function."; $objDb->query("UPDATE queue_args SET done='1' WHERE id='{$arg_id}'"); }
循环.php
include('common.php'); for ($i=1;$i<=200;$i++){ $pid = pcntl_fork(); if (!$pid) { //child proccess - do something without calling the shutdown function posix_kill(getmypid(),9); } } exit(); //this is when the shutdown function should eventually be called
谢谢