Reproduction for https://github.com/flox/product/issues/1088 when using exec.Command within a containerd shim.
Test 0: Baseline (no reaper components)
===============================================
Establishes baseline: normal exec.Command behavior
---------------------------------------
WITHOUT Setpgid
---------------------------------------
Run 1: ✓ succeeded
Run 2: ✓ succeeded
Run 3: ✓ succeeded
Run 4: ✓ succeeded
Run 5: ✓ succeeded
Run 6: ✓ succeeded
Run 7: ✓ succeeded
Run 8: ✓ succeeded
Run 9: ✓ succeeded
Run 10: ✓ succeeded
Run 11: ✓ succeeded
Run 12: ✓ succeeded
Run 13: ✓ succeeded
Run 14: ✓ succeeded
Run 15: ✓ succeeded
Run 16: ✓ succeeded
Run 17: ✓ succeeded
Run 18: ✓ succeeded
Run 19: ✓ succeeded
Run 20: ✓ succeeded
RESULT: 20 succeeded, 0 failed
✓ All tests passed
---------------------------------------
WITH Setpgid
---------------------------------------
Run 1: ✓ succeeded
Run 2: ✓ succeeded
Run 3: ✓ succeeded
Run 4: ✓ succeeded
Run 5: ✓ succeeded
Run 6: ✓ succeeded
Run 7: ✓ succeeded
Run 8: ✓ succeeded
Run 9: ✓ succeeded
Run 10: ✓ succeeded
Run 11: ✓ succeeded
Run 12: ✓ succeeded
Run 13: ✓ succeeded
Run 14: ✓ succeeded
Run 15: ✓ succeeded
Run 16: ✓ succeeded
Run 17: ✓ succeeded
Run 18: ✓ succeeded
Run 19: ✓ succeeded
Run 20: ✓ succeeded
RESULT: 20 succeeded, 0 failed
✓ All tests passed
Step 1: Setting up SIGCHLD handler...
✓ Registered SIGCHLD handler
✓ Started reaper goroutine
Test 1: After SIGCHLD handler (no subreaper)
===============================================
Tests if SIGCHLD handler alone causes ECHILD races
Handler only reaps direct children (not reparented descendants)
---------------------------------------
WITHOUT Setpgid
---------------------------------------
Run 1: ❌ FAILED - producer failed: waitid: no child processes
Run 2: ❌ FAILED - consumer failed: waitid: no child processes
Run 3: ✓ succeeded
Run 4: ❌ FAILED - producer failed: waitid: no child processes
Run 5: ✓ succeeded
Run 6: ✓ succeeded
Run 7: ❌ FAILED - producer failed: waitid: no child processes
Run 8: ❌ FAILED - producer failed: waitid: no child processes
Run 9: ✓ succeeded
Run 10: ❌ FAILED - consumer failed: waitid: no child processes
Run 11: ❌ FAILED - producer failed: waitid: no child processes
Run 12: ❌ FAILED - producer failed: waitid: no child processes
Run 13: ❌ FAILED - producer failed: waitid: no child processes
Run 14: ❌ FAILED - producer failed: waitid: no child processes
Run 15: ❌ FAILED - producer failed: waitid: no child processes
Run 16: ❌ FAILED - producer failed: waitid: no child processes
Run 17: ❌ FAILED - producer failed: waitid: no child processes
Run 18: ❌ FAILED - producer failed: waitid: no child processes
Run 19: ❌ FAILED - producer failed: waitid: no child processes
Run 20: ❌ FAILED - producer failed: waitid: no child processes
RESULT: 4 succeeded, 16 failed
❌ Failures detected
---------------------------------------
WITH Setpgid
---------------------------------------
Run 1: ❌ FAILED - producer failed: waitid: no child processes
Run 2: ❌ FAILED - producer failed: waitid: no child processes
Run 3: ❌ FAILED - producer failed: waitid: no child processes
Run 4: ✓ succeeded
Run 5: ❌ FAILED - producer failed: waitid: no child processes
Run 6: ✓ succeeded
Run 7: ✓ succeeded
Run 8: ❌ FAILED - producer failed: waitid: no child processes
Run 9: ✓ succeeded
Run 10: ❌ FAILED - consumer failed: waitid: no child processes
Run 11: ❌ FAILED - producer failed: waitid: no child processes
Run 12: ✓ succeeded
Run 13: ❌ FAILED - consumer failed: waitid: no child processes
Run 14: ✓ succeeded
Run 15: ✓ succeeded
Run 16: ❌ FAILED - producer failed: waitid: no child processes
Run 17: ❌ FAILED - producer failed: waitid: no child processes
Run 18: ❌ FAILED - producer failed: waitid: no child processes
Run 19: ✓ succeeded
Run 20: ❌ FAILED - producer failed: waitid: no child processes
RESULT: 8 succeeded, 12 failed
❌ Failures detected
Step 2: Setting up subreaper...
✓ Set PR_SET_CHILD_SUBREAPER
Test 2: Full reaper (SIGCHLD + subreaper)
===============================================
This matches actual containerd shim configuration
Handler reaps ALL children AND reparented descendants
---------------------------------------
WITHOUT Setpgid
---------------------------------------
Run 1: ❌ FAILED - producer failed: waitid: no child processes
Run 2: ❌ FAILED - producer failed: waitid: no child processes
Run 3: ❌ FAILED - producer failed: waitid: no child processes
Run 4: ❌ FAILED - producer failed: waitid: no child processes
Run 5: ❌ FAILED - producer failed: waitid: no child processes
Run 6: ❌ FAILED - producer failed: waitid: no child processes
Run 7: ❌ FAILED - producer failed: waitid: no child processes
Run 8: ✓ succeeded
Run 9: ❌ FAILED - producer failed: waitid: no child processes
Run 10: ❌ FAILED - producer failed: waitid: no child processes
Run 11: ✓ succeeded
Run 12: ❌ FAILED - producer failed: waitid: no child processes
Run 13: ❌ FAILED - producer failed: waitid: no child processes
Run 14: ❌ FAILED - producer failed: waitid: no child processes
Run 15: ❌ FAILED - consumer failed: waitid: no child processes
Run 16: ❌ FAILED - consumer failed: waitid: no child processes
Run 17: ❌ FAILED - consumer failed: waitid: no child processes
Run 18: ❌ FAILED - consumer failed: waitid: no child processes
Run 19: ❌ FAILED - producer failed: waitid: no child processes
Run 20: ❌ FAILED - consumer failed: waitid: no child processes
RESULT: 2 succeeded, 18 failed
❌ Failures detected
---------------------------------------
WITH Setpgid
---------------------------------------
Run 1: ✓ succeeded
Run 2: ❌ FAILED - consumer failed: waitid: no child processes
Run 3: ✓ succeeded
Run 4: ❌ FAILED - producer failed: waitid: no child processes
Run 5: ❌ FAILED - producer failed: waitid: no child processes
Run 6: ❌ FAILED - producer failed: waitid: no child processes
Run 7: ❌ FAILED - producer failed: waitid: no child processes
Run 8: ❌ FAILED - producer failed: waitid: no child processes
Run 9: ❌ FAILED - producer failed: waitid: no child processes
Run 10: ✓ succeeded
Run 11: ❌ FAILED - producer failed: waitid: no child processes
Run 12: ❌ FAILED - producer failed: waitid: no child processes
Run 13: ✓ succeeded
Run 14: ❌ FAILED - producer failed: waitid: no child processes
Run 15: ❌ FAILED - consumer failed: waitid: no child processes
Run 16: ❌ FAILED - producer failed: waitid: no child processes
Run 17: ❌ FAILED - producer failed: waitid: no child processes
Run 18: ❌ FAILED - producer failed: waitid: no child processes
Run 19: ❌ FAILED - producer failed: waitid: no child processes
Run 20: ❌ FAILED - producer failed: waitid: no child processes
RESULT: 4 succeeded, 16 failed
❌ Failures detected
---------------------------------------
Using reaper.Default API
---------------------------------------
Run 1: ✓ succeeded
Run 2: ✓ succeeded
Run 3: ✓ succeeded
Run 4: ✓ succeeded
Run 5: ✓ succeeded
Run 6: ✓ succeeded
Run 7: ✓ succeeded
Run 8: ✓ succeeded
Run 9: ✓ succeeded
Run 10: ✓ succeeded
Run 11: ✓ succeeded
Run 12: ✓ succeeded
Run 13: ✓ succeeded
Run 14: ✓ succeeded
Run 15: ✓ succeeded
Run 16: ✓ succeeded
Run 17: ✓ succeeded
Run 18: ✓ succeeded
Run 19: ✓ succeeded
Run 20: ✓ succeeded
RESULT: 20 succeeded, 0 failed
✓ All tests passed