Commit f4159eff92

Giuseppe Cesarano <PecoraInPannaCotta@gmail.com>
2025-11-07 08:53:43
std.Child: start_suspended ported to posix
1 parent 5c0309a
Changed files (1)
lib
std
process
lib/std/process/Child.zig
@@ -85,8 +85,8 @@ expand_arg0: Arg0Expand,
 /// Darwin-only. Disable ASLR for the child process.
 disable_aslr: bool = false,
 
-/// Darwin and Windows only. Start child process in suspended state. For Darwin it's started
-/// as if SIGSTOP was sent.
+/// Start child process in suspended state.
+/// For Posix systems it's started as if SIGSTOP was sent.
 start_suspended: bool = false,
 
 /// Windows-only. Sets the CREATE_NO_WINDOW flag in CreateProcess.
@@ -669,6 +669,10 @@ fn spawnPosix(self: *ChildProcess) SpawnError!void {
             posix.setpgid(0, pid) catch |err| forkChildErrReport(err_pipe[1], err);
         }
 
+        if (self.start_suspended) {
+            posix.kill(posix.getpid(), .STOP) catch |err| forkChildErrReport(err_pipe[1], err);
+        }
+
         const err = switch (self.expand_arg0) {
             .expand => posix.execvpeZ_expandArg0(.expand, argv_buf.ptr[0].?, argv_buf.ptr, envp),
             .no_expand => posix.execvpeZ_expandArg0(.no_expand, argv_buf.ptr[0].?, argv_buf.ptr, envp),