前言
Laravel 的 Process facade 是 Symfony Process 元件 的輕量包裝。 提供從 Laravel 應用程式呼叫 shell 指令並處理結果的簡潔 API。啟動 process
使用Process::run() 可同步執行指令並取得結果。
ProcessResult 實例提供了各種確認結果的方法。
失敗時擲出例外
若要在結束碼大於 0 時擲出Illuminate\Process\Exceptions\ProcessFailedException,可用 throw() 或 throwIf()。
Process 選項
工作目錄
可用path() 指定工作目錄。省略時會使用目前 PHP 腳本的工作目錄。
標準輸入
可用input() 將資料傳給 process 的標準輸入。
逾時(timeout)
預設為 60 秒。可用timeout() 變更。逾時時 process 會被中斷,並擲出 ProcessTimedOutException。
CarbonInterval 輔助函式。
forever()。
環境變數
可用env() 新增或覆寫環境變數。系統的環境變數會自動被繼承。
false。
停用輸出
若不需要大量輸出,可用quietly() 抑制記憶體消耗。
即時輸出
在run() 的第 2 個引數傳入 closure,可即時接收輸出。
Pipeline
使用Process::pipe() 可以把某個指令的輸出作為下一個指令的輸入。
as() 為每個 process 加上 key,就能在輸出 closure 中判別是哪個 process 的輸出。
非同步 process
使用Process::start() 可非同步啟動 process。process 執行期間,應用程式可繼續其他處理。
Process ID 與 signal
可用id() 取得執行中 process 的作業系統 process ID。
signal() 送出 signal 到 process。
非同步 process 的輸出
執行中使用latestOutput() 與 latestErrorOutput() 可取得自上次取得以來的差量輸出。
waitUntil()。
非同步 process 的逾時確認
在迴圈中呼叫ensureNotTimedOut(),若已逾時會擲出例外。
並行 process
使用Process::pool() 可以並行執行多個 process。
concurrently() 可用一行寫立即啟動 pool 並等待結果的處理。
為 process 命名
以as() 為每個 process 加上字串 key,可讓結果取得更清楚。
測試
Process 的偽造(fake)
用Process::fake() 可以在不實際執行 shell 指令的情況下進行測試。
偽造特定指令
可用萬用字元或指令字串作為 key 設定個別的 fake。序列(sequence)的偽造
當同一個指令被呼叫多次時,可指定回傳結果的順序。斷言
防止非預期的 process
呼叫Process::preventStrayProcesses() 時,若執行了未設定 fake 的指令便會擲出例外。
相關頁面
Artisan Console
建立自訂指令來呼叫 process
Queue
與非同步處理的比較