aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-09-01 10:59:29 +0000
committer_ov4 <ov4@ov4.org>2026-09-01 10:59:29 +0000
commit07631a9e2060794934ae7528afaf5257cb8568f6 (patch)
treec4830aae86314e493fbf1ba37569c349734750a4 /src
parent6d9469d916bb80aa76c82097e60b725de1661d5c (diff)
fix
Diffstat (limited to 'src')
-rw-r--r--src/eval.cc4
-rw-r--r--src/ground.cc5
2 files changed, 7 insertions, 2 deletions
diff --git a/src/eval.cc b/src/eval.cc
index 09d1196..0dbab40 100644
--- a/src/eval.cc
+++ b/src/eval.cc
@@ -61,10 +61,10 @@ void eval(char *cmdline)
if (!ground) // foreground
tcsetpgrp(tty_fd, getpgrp());
+ sigprocmask(SIG_SETMASK, &prev, nullptr);
+
// program inside execve may use SIGTTIN/SIGTTOU so just restore in child
sigprocmask(SIG_UNBLOCK, &block_io, nullptr);
-
- sigprocmask(SIG_SETMASK, &prev, nullptr);
execve(cmd_c, argv, environ);
diff --git a/src/ground.cc b/src/ground.cc
index 265a22d..53f8652 100644
--- a/src/ground.cc
+++ b/src/ground.cc
@@ -83,8 +83,13 @@ void do_bgfg(char **argv)
sigset_t prev_with_sigchld_blocked = prev;
sigaddset(&prev_with_sigchld_blocked, SIGCHLD);
sigprocmask(SIG_SETMASK, &prev_with_sigchld_blocked, NULL);
+
+ sigprocmask(SIG_BLOCK, &block_io, nullptr);
+ tcsetpgrp(tty_fd, j->pid);
+
if (kill(-(j->pid), SIGCONT) < 0)
{
+ tcsetpgrp(tty_fd, shell_pgid);
cerr << "Cannot continue process " << j->pid;
sigprocmask(SIG_SETMASK, &prev, NULL);
return;