如何检查php脚本是否已在运行

如何检查php脚本是否已在运行,php,cron,while-loop,Php,Cron,While Loop,如何创建不可阻挡的while循环, 若它已经在运行,请不要再次运行它,我假设若运行它的脚本将更新数据库中的最后一个cron时间,并且脚本将检查当前时间(40秒)是否小于最后一个cron时间。我所拥有的示例,但这是重复(一次又一次地运行do进程)谢谢 启动脚本时,请检查锁定文件。如果确实存在,请退出或跳过循环。如果该文件不存在,请创建该文件并让其运行。正是您所需要的!您可以使用它来分叉PHP进程 while(true) { // Infinite

如何创建不可阻挡的while循环, 若它已经在运行,请不要再次运行它,我假设若运行它的脚本将更新数据库中的最后一个cron时间,并且脚本将检查当前时间(40秒)是否小于最后一个cron时间。我所拥有的示例,但这是重复(一次又一次地运行do进程)谢谢


启动脚本时,请检查锁定文件。如果确实存在,请退出或跳过循环。如果该文件不存在,请创建该文件并让其运行。

正是您所需要的!您可以使用它来分叉PHP进程

                 while(true) { // Infinite

                     $pid = pcntl_fork();

                        switch (pcntl_fork($pid)) {

                                case -1:

                                        die('Fork failed');

                                        break;

                                case 0: // Child

                                        processing();

                                        exit(0);

                                        break;

                                default: // Parent

                                        pcntl_waitpid($pid, $status);

                                        break;

                        }

        }

“锁定文件”可以是任何只有通过其存在才能锁定另一个脚本运行的旧文件。当以前运行的脚本结束时,它将删除锁文件作为其清理过程的一部分。您是对的,但如果进程终止怎么办?它不会再运行了,所以这就是为什么我尝试这样做的原因。你说的终止是什么意思?我忘了提到脚本完成后必须删除该文件。标准技巧是将pid存储在锁定文件中,当存在该文件时,执行
kill-0
并使用生成的错误代码。(要么不存在,要么属于其他uid,要么为零)如果错误为零,则进程(使用我们的uid和相同的进程号运行的另一个进程)仍然存在。通过对ps的输出进行灰色化可以获得额外的信息。为什么不创建一个只表示锁的文件呢。循环开始时,您尝试请求文件锁定。如果不可能,则表示另一个脚本正在运行该过程?该功能已在我的主机上禁用
                 while(true) { // Infinite

                     $pid = pcntl_fork();

                        switch (pcntl_fork($pid)) {

                                case -1:

                                        die('Fork failed');

                                        break;

                                case 0: // Child

                                        processing();

                                        exit(0);

                                        break;

                                default: // Parent

                                        pcntl_waitpid($pid, $status);

                                        break;

                        }

        }