aboutsummaryrefslogtreecommitdiff
path: root/tsh.cc
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-08-13 14:51:00 +0000
committer_ov4 <ov4@ov4.org>2026-08-13 14:51:00 +0000
commit97179bb75cbfc43d94a10a34410a8f9752090aaa (patch)
treebadc811974d397e1dafd4ed5fd6bea97c30d2791 /tsh.cc
parent972fbd8cfce4e3b5bad2f119ba13585b73172f17 (diff)
update
Diffstat (limited to 'tsh.cc')
-rw-r--r--tsh.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/tsh.cc b/tsh.cc
index 6c291ab..a0d425c 100644
--- a/tsh.cc
+++ b/tsh.cc
@@ -363,9 +363,15 @@ void do_bgfg(char **argv)
{
LOG << "fg" << endl;
j->state = FG;
+
+ sigset_t prev_with_sigchld_blocked = prev;
+ sigaddset(&prev_with_sigchld_blocked, SIGCHLD);
+ sigprocmask(SIG_SETMASK, &prev_with_sigchld_blocked, NULL);
kill(-(j->pid), SIGCONT);
- sigprocmask(SIG_SETMASK, &prev, NULL);
+
waitfg(j->pid);
+
+ sigprocmask(SIG_SETMASK, &prev, NULL);
} else // bg
{
LOG << "bg" << endl;
@@ -388,7 +394,7 @@ void waitfg(pid_t pid)
{
sigset_t prev_with_sigchld_unblocked;
// get current blocked signals
- sigprocmask(0, NULL, &prev_with_sigchld_unblocked);
+ sigprocmask(0, nullptr, &prev_with_sigchld_unblocked);
sigdelset(&prev_with_sigchld_unblocked, SIGCHLD);
LOG << "waiting for pid "<< fgpid(jobs) << endl;
while (fgpid(jobs) != 0)