Skip to main content

前言

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,可讓結果取得更清楚。
也可對整個 pool 送出 signal。

測試

Process 的偽造(fake)

Process::fake() 可以在不實際執行 shell 指令的情況下進行測試。
也能指定輸出與結束碼。

偽造特定指令

可用萬用字元或指令字串作為 key 設定個別的 fake。

序列(sequence)的偽造

當同一個指令被呼叫多次時,可指定回傳結果的順序。

斷言

防止非預期的 process

呼叫 Process::preventStrayProcesses() 時,若執行了未設定 fake 的指令便會擲出例外。

相關頁面

Artisan Console

建立自訂指令來呼叫 process

Queue

與非同步處理的比較
最後修改於 2026年8月2日