diff options
| author | _ov4 <ov4@ov4.org> | 2026-09-01 10:41:39 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-09-01 10:41:39 +0000 |
| commit | 6d9469d916bb80aa76c82097e60b725de1661d5c (patch) | |
| tree | 1c8d4f046c46d387914bc73fd912dd6eac950a0d /src/handler.cc | |
| parent | 94c449ca42bd29de2c2fd137945550fe110fcd17 (diff) | |
real foreground/background
Diffstat (limited to 'src/handler.cc')
| -rw-r--r-- | src/handler.cc | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/handler.cc b/src/handler.cc index b6399c2..4fa3e2f 100644 --- a/src/handler.cc +++ b/src/handler.cc @@ -4,17 +4,29 @@ namespace ov4 { extern char **environ; -sigset_t BLOCK_HANDLER; + +sigset_t + block_sig_TTOU, + block_job, + block_io; void signal_init() { /* Install the signal handlers */ - sigemptyset(&BLOCK_HANDLER); - sigaddset(&BLOCK_HANDLER, SIGINT); - sigaddset(&BLOCK_HANDLER, SIGTSTP); - sigaddset(&BLOCK_HANDLER, SIGCHLD); - + sigemptyset(&block_job); + sigemptyset(&block_sig_TTOU); + sigemptyset(&block_io); + + sigaddset(&block_job, SIGINT); + sigaddset(&block_job, SIGTSTP); + sigaddset(&block_job, SIGCHLD); + + sigaddset(&block_sig_TTOU, SIGTTOU); + + sigaddset(&block_io, SIGTTOU); + sigaddset(&block_io, SIGTTIN); + Signal(SIGINT, sigint_handler); /* ctrl-c */ Signal(SIGTSTP, sigtstp_handler); /* ctrl-z */ Signal(SIGCHLD, sigchld_handler); /* Terminated or stopped child */ @@ -161,7 +173,7 @@ int block_all(sigset_t *prev) int block_handler(sigset_t *prev) { - return sigprocmask(SIG_BLOCK, &BLOCK_HANDLER, prev); + return sigprocmask(SIG_BLOCK, &block_job, prev); } void sigquit_handler(int sig) |
