Skip to content

Commit 5d55307

Browse files
committed
posix_spawn: handle pgroup
1 parent cdc0a79 commit 5d55307

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

process.c

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4657,7 +4657,22 @@ rb_posix_spawn(struct rb_execarg *eargp)
46574657
VALUE envp_str = eargp->envp_str;
46584658
char **envp = RTEST(envp_str) ? RB_IMEMO_TMPBUF_PTR(envp_str) : NULL;
46594659

4660-
int err = posix_spawn(&pid, abspath, NULL, NULL, argv, envp);
4660+
int err;
4661+
4662+
posix_spawnattr_t attr;
4663+
posix_spawnattr_init(&attr);
4664+
4665+
if (eargp->pgroup_given) {
4666+
if ((err = posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETPGROUP))) {
4667+
rb_syserr_fail(err, "posix_spawnattr_setflags");
4668+
}
4669+
4670+
if ((err = posix_spawnattr_setpgroup(&attr, eargp->pgroup_pgid))) {
4671+
rb_syserr_fail(err, "posix_spawnattr_setpgroup");
4672+
}
4673+
}
4674+
4675+
err = posix_spawn(&pid, abspath, NULL, &attr, argv, envp);
46614676
if (err) {
46624677
rb_sys_fail(abspath);
46634678
}
@@ -4680,7 +4695,7 @@ rb_spawn_process(struct rb_execarg *eargp, char *errmsg, size_t errmsg_buflen)
46804695

46814696
#if HAVE_POSIX_SPAWN
46824697
if (//!eargp->use_shell &&
4683-
!eargp->pgroup_given &&
4698+
// !eargp->pgroup_given &&
46844699
!eargp->umask_given &&
46854700
!eargp->unsetenv_others_given &&
46864701
!eargp->close_others_given &&

0 commit comments

Comments
 (0)