spawn.signal_stress: reap spawned children on exit

Test: adb shell \
  /data/nativetest64/bionic-unit-tests-static/bionic-unit-tests-static \
  --gtest_filter=spawn.signal_stress
Bug: b/77824306
Change-Id: I970d1a4d0f8ac9621e676f32f838fc2f638d9750
diff --git a/tests/spawn_test.cpp b/tests/spawn_test.cpp
index 7e45ec3..a5e7e56 100644
--- a/tests/spawn_test.cpp
+++ b/tests/spawn_test.cpp
@@ -463,10 +463,19 @@
   // because our sigset_t was too small.
   ScopedSignalHandler ssh(SIGRTMIN, [](int) { ASSERT_EQ(getpid(), parent); });
 
+  const size_t pid_count = 128;
+  pid_t spawned_pids[pid_count];
+
   ExecTestHelper eth;
   eth.SetArgs({"true", nullptr});
-  for (size_t i = 0; i < 128; ++i) {
-    posix_spawn(nullptr, "true", nullptr, attrs[i % 3], eth.GetArgs(), nullptr);
+  for (size_t i = 0; i < pid_count; ++i) {
+    pid_t spawned_pid;
+    ASSERT_EQ(0, posix_spawn(&spawned_pid, "true", nullptr, attrs[i % 3], eth.GetArgs(), nullptr));
+    spawned_pids[i] = spawned_pid;
+  }
+
+  for (pid_t spawned_pid : spawned_pids) {
+    ASSERT_EQ(spawned_pid, TEMP_FAILURE_RETRY(waitpid(spawned_pid, nullptr, 0)));
   }
 
   AssertChildExited(pid, 99);