From 07631a9e2060794934ae7528afaf5257cb8568f6 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Tue, 1 Sep 2026 10:59:29 +0000 Subject: fix --- src/eval.cc | 4 ++-- src/ground.cc | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'src') 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; -- cgit v1.3.1-4-g156e