2010-07-29 47 views
0

我正在开发一个长时间运行的命令行脚本,当然我希望不要多次启动自己。所以我写了一个.pid文件,并在启动时检查是否存在具有此类PID的进程。 问题是在Windows上,它返回0作为PID,所以我总是通过该PID运行得到一个进程(系统空闲具有PID 0)。为什么在PHP CLI中getmypid()返回0作为pid?

有人知道如何解决这个问题吗?我可以在Windows上创建一个守护进程吗?也许修复会与pcntl_fork分叉?

P.S.我使用Yii,它是CConsoleCommand类作为基础。

回答

0

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

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

+0

我自己检查PID,我写一个PID文件,并在下一次运行检查文件是否存在,如果它确实 - 读取PID并启动tasklist.exe以检查PID是否正在运行。坏事是getmypid返回0,而不是进程pid。 – Psihius 2010-07-30 12:31:42

+0

哪个版本的windows和PHP?我在Windows 7和PHP 5.3.2上,并且对我来说工作正常。我运行“print getmypid(); flush(); sleep(35);”然后在另一个cmd窗口中运行tasklist.exe并显示在那里。您是否尝试过手动查看它是否显示在任务列表中?如果它确实可能解析不正确? – 2010-07-30 13:25:21

+0

其实我发现我在函数名中做了一个类型,我调用getmygid()而不是getmypid()。现在它工作得很好。对不起,烦扰:) – Psihius 2010-08-02 07:49:03

相关问题