I recently ran into an issue where my Laravel Dusk tests were failing with this error:
Symfony\Component\Process\Exception\ProcessSignaledException
The process has been signaled with signal "11".
at vendor/symfony/process/Process.php:473
469▕ usleep(1000);
470▕ }
471▕
472▕ if ($this->processInformation['signaled'] && $this->processInformation['termsig'] !== $this->latestSignal) {
➜ 473▕ throw new ProcessSignaledException($this);
474▕ }
475▕
476▕ return $this->exitcode;
477▕ }
+17 vendor frames
18 artisan:13
Illuminate\Foundation\Application::handleCommand(Object(Symfony\Component\Console\Input\ArgvInput))
At first glance, this looks like a Chrome or Chromedriver issue. Most of the troubleshooting guidance online (and from AI tools) focuses heavily on browser crashes, driver mismatches, or headless mode flags.
Signal 11 is a segmentation fault (SIGSEGV). It means a process crashed at the operating system level. In Dusk’s case, Symfony launches Chrome as a child process, and if Chrome crashes, you get this exception.
And technically, Chrome was crashing. But the browser wasn’t the root cause...
The crash was being triggered by an infinite loop inside one of my database factories.
Here’s the problematic factory:
class NoteFactory extends Factory
{
/**
* Define the model’s default state.
*
* @return array
*/
public function definition()
{
return [
'slug' => 'test-' . Str::kebab($this->faker->words(2, true)),
'title' => $this->faker->words(4, true),
'description' => $this->faker->sentences(3, true),
'published_at' => Carbon::now()->subDays(2),
'related' => function () {
# 🚩🚩🚩 This causes infinite recursion 🚩🚩🚩
return Note::factory()->create()->slug;
},
];
}
The issue is subtle but severe:
This results in infinite recursion and eventually crashes the PHP process. When that happens during a Dusk test, Chrome crashes as a side effect, and Symfony reports signal 11.
The correct approach is to avoid self-recursion inside definition().
Instead, I set related to null by default:
public function definition()
{
return [
'slug' => 'test-' . Str::kebab($this->faker->words(2, true)),
'title' => $this->faker->words(4, true),
'description' => $this->faker->sentences(3, true),
'published_at' => Carbon::now()->subDays(2),
'related' => null,
];
}
Then define an explicit factory state when you actually want a related note:
public function hasRelated()
{
return $this->state(function (array $attributes) {
return [
'related' => Note::factory()->create()->slug,
];
});
}
Now:
If you encounter ProcessSignaledException with signal 11 during Dusk tests:
Sometimes the browser crash is just a symptom.