diff options
| author | _ov4 <ov4@ov4.org> | 2026-08-13 14:51:00 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-08-13 14:51:00 +0000 |
| commit | 97179bb75cbfc43d94a10a34410a8f9752090aaa (patch) | |
| tree | badc811974d397e1dafd4ed5fd6bea97c30d2791 /tsh.cc | |
| parent | 972fbd8cfce4e3b5bad2f119ba13585b73172f17 (diff) | |
update
Diffstat (limited to 'tsh.cc')
| -rw-r--r-- | tsh.cc | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -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) |
