2010-07-29 79 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