微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在php中找到PID

我正在写一个将通过cron运行的PHP脚本.它的任务是调用其他PHP脚本.被调用的脚本也可以在外部执行.我想要的是,当一个文件正在执行时,它不应该同时执行.为了清楚起见,请考虑以下内容

假设有一个脚本master.PHP,它一个一个调用另外两个脚本script1.PHP和script2.PHP.现在,一旦它调用了script1.PHP,它就会开始执行并花费10分钟来完成它的处理.这个Script1.PHP也可以由用户在这10分钟内单独运行.

我想要做的是当这个脚本在其处理过程中时,它不应该只是平行执行.

有没有办法实现这个目标? (也许通过检查script1.PHP的PID).

Thanx提前.

解决方法:

这就是我用pid文件做的方法.此外,如果脚本运行超过300秒,它将被终止:

$pid_file = '/var/run/script1.pid';
if (file_exists($pid_file)) {
        $pid = file_get_contents($pid_file);
        if ($pid && file_exists('/proc/' . $pid)) {
                $time = filemtime($pid_file);
                if (time() - $time > 300) {
                        posix_kill($pid, 9);
                } else {
                    exit("Another instance of {$argv[0]} is running.\n");
                }
        }
}

$pid = posix_getpid();
if (!file_put_contents($pid_file, $pid)) exit("Can't write pid file $pid_file.\n");

然后取消链接脚本末尾的pid文件

unlink($pid_file);

如果要在第一个实例完成时运行脚本 – 将exit()替换为sleep(1)并将整个块放在循环中.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐