← More Guides

Laravel Dusk - Debugging Signal 11 Symfony ProcessSignaledException Crash

Video Notes

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 Real Problem: Infinite Factory Recursion

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 Fix

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:

Takeaway

If you encounter ProcessSignaledException with signal 11 during Dusk tests:

Sometimes the browser crash is just a symptom.

← More Guides