Skip to content

Commit aa71b07

Browse files
committed
posix_spawn: handle pgroup
1 parent d5faf7f commit aa71b07

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
@@ -4659,7 +4659,22 @@ rb_posix_spawn(struct rb_execarg *eargp)
46594659
VALUE envp_str = eargp->envp_str;
46604660
char **envp = RTEST(envp_str) ? RB_IMEMO_TMPBUF_PTR(envp_str) : NULL;
46614661

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

46834698
#if HAVE_POSIX_SPAWN
46844699
if (//!eargp->use_shell &&
4685-
!eargp->pgroup_given &&
4700+
// !eargp->pgroup_given &&
46864701
!eargp->umask_given &&
46874702
!eargp->unsetenv_others_given &&
46884703
!eargp->close_others_given &&

0 commit comments

Comments
 (0)