2009-06-04 33 views
1

我運行一個SH 腳本通過PHPUbuntu的服務器運行的java過程。我正在使用proc_open來運行該進程。通常的工作流程是這樣:如何從proc_open保存進程資源以便稍後檢查狀態?

  • 請求一個頁面 - >
  • 腳本運行(直到它完成) - >
  • 結果頁面。

在我的情況下,腳本並行運行,所以服務器不會等到腳本完成(有時需要幾個小時,所以它不能),所以我需要保存該資源以某種方式稍後關注它(進程的狀態或只是停止它)。

資源類型是「process」,我用這個函數get_resource_type來獲取它。

在這種情況下,Serialize不起作用 - 資源是一個例外(你可以在參數框中看http://il2.php.net/manual/en/function.serialize.php)。

我的目標是一個很好的流程處理。有人知道我該如何使用資源或其他方式來處理流程。

+1

「良好的流程處理」是什麼意思? – yhager 2009-06-04 14:29:01

+1

要知道進程的真實狀態,而不是通過使用文件幫助來指示第一個建議。 – Adi 2009-06-07 08:21:01

回答

1

您不能存儲資源類型以便以後在PHP中使用。你需要做的是實現某種形式的異步通信 - 可能是一個文件,其中一個寫入狀態信息,另一個讀取,共享內存,命名管道......

我會查看pcntl extension。提示:出於安全原因,在網絡服務器環境中無法分叉。

0

在我的情況下,腳本並行運行,這樣服務器不會等到腳本完成(有時需要幾個小時,因此它不能)..

這不應該是一個問題本身。只要它不是從Web服務器啓動的,您可以輕鬆地進行長時間運行的php進程。如果您需要從Web應用程序啓動進程,我建議您在數據庫表中插入一個條目,然後讓cronjob運行一個腳本,該腳本檢查此隊列並執行處理。

相關問題