Skip to main content

Introducción

El facade Process de Laravel es un envoltorio ligero sobre el componente Process de Symfony. Ofrece una API concisa para ejecutar comandos de shell desde tu aplicación Laravel y tratar el resultado.

Arrancar un proceso

Con Process::run() ejecutas un comando de forma síncrona y obtienes el resultado.
La instancia ProcessResult expone métodos para inspeccionar el resultado.

Lanzar una excepción si falla

Para lanzar Illuminate\Process\Exceptions\ProcessFailedException cuando el código sea superior a 0, utiliza throw() o throwIf().

Opciones del proceso

Directorio de trabajo

Indica el directorio con path(). Si lo omites, se utiliza el directorio actual del script PHP.

Entrada estándar

Con input() pasas datos por la entrada estándar del proceso.

Timeout

Por defecto son 60 segundos. Cámbialo con timeout(). Si expira, el proceso se aborta y se lanza ProcessTimedOutException.
También puedes usar helpers CarbonInterval.
Para desactivar el timeout utiliza forever().
También hay un idle timeout (segundos consecutivos sin salida).

Variables de entorno

Con env() añades o sobrescribes variables de entorno. Las del sistema se heredan automáticamente.
Para excluir una variable heredada, asígnale false.

Desactivar la salida

Si no vas a usar salidas voluminosas, quietly() reduce el consumo de memoria.

Salida en tiempo real

Pasando una closure como segundo argumento de run(), recibes la salida en streaming.

Pipelines

Con Process::pipe() la salida de un comando alimenta la entrada del siguiente.
También puedes pasar un array de comandos.
Si asignas una clave con as() a cada proceso, la closure de salida puede identificar de cuál proviene la salida.

Procesos asíncronos

Con Process::start() arrancas un proceso en segundo plano. Tu aplicación puede seguir con otras tareas mientras se ejecuta.

PID y señales

Con id() obtienes el PID del proceso.
Con signal() envías una señal al proceso.

Salida de un proceso asíncrono

Durante la ejecución, latestOutput() y latestErrorOutput() devuelven la salida generada desde la última llamada.
Para esperar hasta que aparezca una determinada salida utiliza waitUntil().

Comprobar timeouts en asíncrono

Llamar a ensureNotTimedOut() dentro del bucle lanza una excepción si el proceso ha excedido el timeout.

Procesos concurrentes

Con Process::pool() ejecutas varios procesos en paralelo.
Con concurrently() arrancas el pool y esperas los resultados en una sola línea.

Asignar nombres a los procesos

Con as() asignas una clave a cada proceso para acceder cómodamente al resultado.
También puedes enviar una señal a todo el pool.

Pruebas

Fake de procesos

Con Process::fake() puedes escribir tests sin ejecutar comandos reales.
Puedes especificar la salida y el código de salida.

Fake de comandos concretos

Con comodines o cadenas exactas como clave, puedes definir fakes distintos.

Fakes en secuencia

Cuando se invoca varias veces el mismo comando, puedes definir el orden de las respuestas.

Aserciones

Prevenir procesos no simulados

Al llamar a Process::preventStrayProcesses(), si se ejecuta un comando sin fake definido se lanza una excepción.

Páginas relacionadas

Consola Artisan

Crea comandos personalizados que invoquen procesos.

Colas

Compáralo con el procesamiento asíncrono.
Última modificación el 13 de julio de 2026