mysql - 關於開啟PHP多進程與它們之間的通訊問題

來源:互聯網
上載者:User

我們通常在Linux上調用PHP來執行定時任務,如php -f xxx.php,有時候需要先有一個PHP父進程,然後開啟多個PHP子進程來做同一件事...

如果這時候當其中一個子進程結束或出現問題時通知父進程,父進程就可以做一些事,如關閉其它正在啟動並執行進程等等吧....

想瞭解一下大家在此類問題上是怎麼實現或處理的?

回複內容:

我們通常在Linux上調用PHP來執行定時任務,如php -f xxx.php,有時候需要先有一個PHP父進程,然後開啟多個PHP子進程來做同一件事...

如果這時候當其中一個子進程結束或出現問題時通知父進程,父進程就可以做一些事,如關閉其它正在啟動並執行進程等等吧....

想瞭解一下大家在此類問題上是怎麼實現或處理的?

我一般用php daemon來做,一個進程作為父進程一直跑著(可能是個while + sleep),父進程判斷時間到了,就fork一個/多個子進程來處理業務,這時父進程監聽子進程退出訊號,子進程業務執行完了就退出了,這時父進程會檢測到,直到所有子進程退出。

一個原則就是父進程儘可能簡單,不要處理商務邏輯,從而保證父進程的穩定性。子進程去處理業務,即使出現FataErr也不會導致所有進程退出。

還有個小提示:訊號是可以被覆蓋的,也就是說兩個子進程退出時,父進程可能只收到一個訊號,這時父進程應該用while迴圈來處理子進程退出事件

http://cn2.php.net/manual/zh/function.pcntl-waitpid.php
php手冊還是非常有學習價值的

題主會了嗎?我這邊用了下pcntl這個方法,貌似要捕獲子進程狀態的時候父進程就會被阻塞,不過PHP從5.3之後開始支援多線程了

用筷子炒菜不知道是什麼樣的感覺?

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.