【问题标题】:Why in PHP CLI getmypid() returns 0 as a pid?为什么在 PHP CLI getmypid() 中返回 0 作为 pid?
【发布时间】:2010-07-29 14:43:31
【问题描述】:

我正在开发一个长时间运行的命令行脚本,当然我不想多次启动它自己。所以我写了一个 .pid 文件并在启动时检查是否存在具有这种 PID 的进程。 问题是在 Windows 上它返回 0 作为 PID,所以我总是通过该 PID 运行一个进程(系统空闲的 PID 为 0)。

有人知道如何解决这个问题吗?我可以让守护进程在 Windows 上运行吗?也许修复将使用 pcntl_fork 进行分叉?

附:我正在使用 Yii,它的基础是 CConsoleCommand 类。

【问题讨论】:

    标签: php daemon cron command-line-interface pid


    【解决方案1】:

    我可能是错的,但我认为如果你写出一个 .pid,它不会在 Windows 上检查文件。

    您可以检查文件是否存在,如果存在则不再运行。而且 afaik pcntl_fork 不能在 Windows 上运行(默认情况下,使用某种 *nix 模拟器可能会工作)

    【讨论】:

    • 我自己检查 PID,我编写了一个 PID 文件并在下次运行时检查文件是否存在,如果存在 - 读取 PID 并启动 tasklist.exe 以检查该 PID 是否正在运行。不好的是 getmypid 返回 0,而不是进程 pid。
    • windows 和 PHP 哪个版本?我在 Windows 7 和 PHP 5.3.2 上,它对我来说很好用。我运行“打印 getmypid();flush();sleep(35);”然后在另一个 cmd 窗口中我运行 tasklist.exe 并显示在那里。您是否尝试过手动查看它是否显示在任务列表中?如果是这样,您的解析可能不正确?
    • 其实我发现我在函数名中做了一个类型,我调用的是getmygid()而不是getmypid()。现在它工作得很好。抱歉打扰了:)
    猜你喜欢
    • 2017-02-14
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 2015-06-21
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多